|
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
|
||||||||||||
События в XAML и конструкторе окна20.06.2023, 15:09. Показов 1460. Ответов 25
Метки нет (Все метки)
Вопрос общего характера:
допустим у меня есть элемент в XML например вот такой:
Не по теме:
Добавлено через 17 минут Добавлено через 2 часа 49 минут не знаю на сколько это корректно, но в обработчике можно вот так проверять загружен ли элемент:
0
|
||||||||||||
| 20.06.2023, 15:09 | |
|
Ответы с готовыми решениями:
25
Подсветка слова в XAML при выборе элемента в конструкторе формы При задании значения в своём свойстве в xaml оно всегда null в конструкторе контрола События не компилируемого xaml |
|
Модератор
|
||
| 21.06.2023, 16:34 | ||
Сообщение было отмечено firnen_dragon как решение
РешениеЕсть привязка SelectedDate="{Binding SelectedDateTime}". Вот и обрабатывайте в VM изменение его свойства.
1
|
||
|
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
|
|
| 21.06.2023, 17:55 [ТС] | |
|
Элд Хасп, Спасибо
0
|
|
|
Модератор
|
|||||||||||||||||
| 21.06.2023, 18:15 | |||||||||||||||||
Возьмём ваш пример переделанный под обработчик:
Так как событие сработало до присвоения DataContext, то в свойство vm.SelectedDateTime не будет записана дата "23.02.2020". А пользователь в GUI будет действовать исходя из предположения, что дата уже задана.
1
|
|||||||||||||||||
|
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
|
|||||||||||||||||||||
| 22.06.2023, 10:49 [ТС] | |||||||||||||||||||||
|
Элд Хасп, Спасибо, я понял, что из события что-то делать - плохо, но у меня вся "логика" приложений построена на том, что я подписываюсь на события и из них обращаюсь к vm, и по этому я не пойму как по другому-то нужно делать?(это все винформы виноваты).
Вот абстрактный пример: у меня есть TextBox, ComboBox и Button мне нужно по клику кнопки обновить коллекцию в combobox с учетом того, что написано в TextBox(это имитация запроса с базы данных). Как делал бы я: Я б создал статический класс в котором будет происходить создание новой коллекции(или любая другая обработка коллекции) в моем понимании это и есть модель: Кликните здесь для просмотра всего текста
В XML подписался бы на событие клика по конопке(В моем понимании то что написано в XML это View ): Кликните здесь для просмотра всего текста
В Vm использовал бы свой пресловутый Display() ![]() Кликните здесь для просмотра всего текста
Ну и в обработчике клика вызвал бы этот Display() и Processing(): Кликните здесь для просмотра всего текста
Вот вопрос как достичь того же результат, но только по mvvm? Потому что как я понимаю у меня не mvvm.
0
|
|||||||||||||||||||||
|
|
||||||||||||
| 22.06.2023, 11:21 | ||||||||||||
|
В методе set свойства нужно просто обработать его изменение
1
|
||||||||||||
|
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
|
||||||
| 22.06.2023, 11:44 [ТС] | ||||||
|
Andrey-MSK, тоесть в моем примере это должно выглядить вот так?
0
|
||||||
|
|
|||||||
| 22.06.2023, 11:57 | |||||||
|
Добавлено через 1 минуту firnen_dragon,
1
|
|||||||
|
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
|
|
| 22.06.2023, 12:12 [ТС] | |
|
Andrey-MSK, Спасибо, значит про команды почитать нужно. И все таки свойство у меня правильно написано?
0
|
|
|
Модератор
|
|||
| 22.06.2023, 12:23 | |||
|
А в целом не желательно в свойствах добавлять логику кроме запоминания и возвращения его значения. Для создания зависимостей обычно используются дополнительные методы. В некоторых фреймворках они автоматически создаются посредством указания атрибутов. Посмотрите Простые реализации для тем на форуме В этой реализации INPC для создания зависимостей используется переопределение виртуального метода OnPropertyChanged.Добавлено через 25 секунд
1
|
|||
|
|
|||||||
| 22.06.2023, 12:26 | |||||||
Лучше как у меня сделать. Там вообще много вариантов реализаций...Вот вариант свойства с моей реализацией INPC, тут просто отслеживаются значения, без логики как в примере выше.
1
|
|||||||
|
Модератор
|
||||
| 22.06.2023, 12:36 | ||||
|
Модель - это СЛОЙ приложения содержащий всю Бизнес (Доменную) Логику. Использование ObservableCollection в Модели хоть и не противоречит прямо этому, но на практике используется крайне редко.Причина в том, что Модель должна контролировать своё состояние. Добавление элемента в коллекцию обычно не позволяет это сделать. Поэтому обычно добавляется элемент через метод Модели, а возвращается коллекция или методом или через свойство иммутабельной коллекции (IEnumerable, IReadOnlyCollection, IReadOnlyList и др.). Если делать через ObservableCollection, то Модель должна сама тоже её прослушивать и реагировать на изменения.Например, такая реализация есть в локальном кеше Контекста БД в EF. Добавлено через 30 секунд Добавлено через 1 минуту Подойдёт только для "быстрого решения на коленке". Добавлено через 3 минуты firnen_dragon, мой совет: начинайте создание приложения с создания Модели в ОТДЕЛЬНОМ проекте. И только после полного её создания и отладки, приступайте к View. На этапе создания View сформируйте интерфейсы для VM. И уже после создания View реализуете интерфейсы VM тоже в ОТДЕЛЬНОМ проекте. Пока не хватает опыта, такая последовательность реализации позволит избежать многих архитектурных ошибок.
1
|
||||
|
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
|
|||||||||||||||||||||||||||||||
| 22.06.2023, 17:10 [ТС] | |||||||||||||||||||||||||||||||
|
Andrey-MSK, Элд Хасп, Спасибо, пошел я смотреть для начала реализации INPC и про команды читать, потом возможно прийдется снова вернуться к этой теме.
Добавлено через 3 часа 56 минут Элд Хасп, Andrey-MSK, Я посмотрел примеры и почитал про команды, написал по образу и подобию под задачу которую я описывал выше (с TextBox, ComboBox и Button), теперь по идее должно быть похоже на mvvm. На текущий момент есть немного вопросов, но сначала то, что я накалякал: XAML: Кликните здесь для просмотра всего текста
Что такое VMDD и почему мы не можем написать все в VM я не до конца понял, но все же их разделил. VMDD: Кликните здесь для просмотра всего текста
VM: Кликните здесь для просмотра всего текста
StaticClass(в нем происходит создание новой коллекции зависимости от значения в Textbox): Кликните здесь для просмотра всего текста
Модель: Кликните здесь для просмотра всего текста
Вопросы: 1)правильно ли я обновляю коллекцию по измению свойства Text? возможно там тоже как-то через команду надо прокинуть это изменение? 2)Знаю, что это не совсем по wpf вопрос, а по с#, но что это вообще передается в методы модели и vm, первый раз просто такое вижу, Value - понятно, но почему равное null?
Пока что это вроде все вопросы, чет думал больше будет Ну и, если есть замечания тоже буду рад их услышать.
0
|
|||||||||||||||||||||||||||||||
|
Модератор
|
||||||||||||||
| 22.06.2023, 20:16 | ||||||||||||||
|
Я же вам писал: начинайте создание приложения с создания Модели в ОТДЕЛЬНОМ проекте. Уточню: Проекте типа "Библиотека Standard".Добавлено через 34 секунды Статическая Модель.... мягко говоря не приветствуется. Добавлено через 10 минут В этом случае в VMDD реализуются только свойства нужные для View и заполняются демонстрационными данными. Ссылки на Модель в таком случае в ней нет. Модель получает производная от VMDD "настоящая" VM и уже она записывает в свойства "настоящие" данные. Добавлено через 35 секунд В вашем случае разделение VMDD и VM не имеет смысла. Добавлено через 52 секунды Добавлено через 4 минуты firnen_dragon, вот заготовка под Модель
Так же следует соблюдать Правила Именования. В данном случае класс Items должен быть именован согласно его предметной области. Имена и значения это чего? Добавлено через 6 минут firnen_dragon, вот чуть дополнил Модель:
1
|
||||||||||||||
|
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
|
||||||||||
| 23.06.2023, 10:59 [ТС] | ||||||||||
|
Элд Хасп,
Пример реализации WPF+MVVM приложения И, если она должна быть не статической то экземпляр модели создавать нужно в vm? И все таки вот это вот приемлемо?
0
|
||||||||||
|
|
||
| 23.06.2023, 11:31 | ||
0
|
||
|
Модератор
|
|||||
| 23.06.2023, 11:43 | |||||
|
Сейчас бы я так не делал. Но в общем случае все слои и зависимости между ними задаются в App. OnPropertyChanged.Добавлено через 2 минуты Вот здесь в реализации BaseInpc тоже есть пример: Простые реализации для тем на форуме
2
|
|||||
|
|
||||||
| 23.06.2023, 11:50 | ||||||
|
Элд Хасп, То бишь в каждой VM переопределять OnPropertyChanged() и прописывать в нём логику для работы свойств?
0
|
||||||
|
Модератор
|
||
| 23.06.2023, 11:55 | ||
|
И сколько видел фраймворков - во всех них это предпочтительный способ. Во многих создание зависимости происходит неявно через указание атрибутов. Но суть та же: в теле свойства только получение и сохранение его значения.
2
|
||
|
|
||||||||||||
| 23.06.2023, 12:16 | ||||||||||||
|
firnen_dragon,
И тогда VM получает все нужные сервисы через свой конструктор
2
|
||||||||||||
| 23.06.2023, 12:16 | |
|
Помогаю со студенческими работами здесь
20
События срабатывают в конструкторе формы
WPF(XAML) анимация сокрытие окна НЕ открываются окна функций для КНОПКИ в конструкторе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|