|
Модератор
|
||||||||||||||||||||||||||||||||||||||||||
Пример реализации WPF+MVVM приложения26.12.2018, 06:04. Показов 45535. Ответов 45
Тема из цикла Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп]
Пример решения ТЗ по теме Нечеткий поиск В теме поставлена задача реализовать: поиск слов по списку слов, отображение списка слов, дополнение списка слов. В любом решении WPF используются интерфейсы ICommand для команд и интерфейс INotifyPropertyChanged (сокращёно INPC) для свойств ViewModel. Поэтому в моих решениях всегда есть два класса: RelayCommand - реализующий интерфейс ICommand
Класс Модели - FuzzySearch_Model
При создании View элементы надо к чему-то привязывать. Создавать абстрактные привязки, в которых на момент редактирования ничего нет, визуально трудно и приводит к многочисленным ошибкам. Поэтому перед созданием View надо создать ViewModel DesignData (Модель представления времени разработки). Она может быть как единая для всей View, так и раздробленная - отдельная для каждого элемента. И надо понимать VMDD - это часть View, а не VM. И заполняется данными она в XAML. Изменяя эти данные, очень удобно видеть как меняется View. Особенно в случаях когда в зависимости от данных должны скрываться/показываться разные элементы. VM, в дальнейшем, удобно наследовать от VMDD. А так как VM должна поддерживать интерфейс INPC, класс VMDD будем наследовать от класса OnPropertyChangedClass. Для привязки команд в VMDD будем использовать класс RelayCommand. Класс VMDD - FuzzySearch_VM_DataDesigner
Для компоновки, в данном случае, хватает комбинации панелей Grid и StackPanel. Все элементы сразу привязываем к данным. Так как у нас есть заполненная VMDD, то в конструкторе всплывают свойства VMDD и в элементах сразу отображаются значения этих свойств. Xaml элементов окна
Класс VM - FuzzySearch_VM
Архив проекта - приложен. В посте #24 дополненное решение (с учётом замечаний Storm23).
11
|
||||||||||||||||||||||||||||||||||||||||||
| 26.12.2018, 06:04 | |
|
Ответы с готовыми решениями:
45
Куда вставлять какой код из темы "Пример реализации WPF+MVVM приложения"? Прошу пример MVVM реализации Пример переключения между окнами WPF MVVM |
|
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
|
|
| 27.12.2018, 21:30 | |
|
0
|
|
|
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
|
||
| 27.12.2018, 21:35 | ||
Точность там потрясающая. И в WinForm все ОК. Где-то в WPF MVVM теряется.Оффтор: Проектик глянули?
0
|
||
|
Модератор
|
||||||||||||||||||||||
| 06.01.2019, 05:37 [ТС] | ||||||||||||||||||||||
|
С учётом замечаний Storm23 внёс изменения в проект. Несколько осложнился код Model и ViewModel, но это всё таки будет более правильным решением.
Модель также дополнил методом нечёткого поиска от alexus5 Подобрать из словаря слова, отличающиеся от введенного пользователем слова не более, чем на одну букву Код Модели Кликните здесь для просмотра всего текста
В View (и соответственно в VMDD и VM) добавил кнопку "Сохранить в..." Код VMDD Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Полный архив обоих проектов приложен
0
|
||||||||||||||||||||||
|
|
||||
| 06.01.2019, 16:46 | ||||
|
2) "Main_VM" ? Обычно придерживаются стиля "MainViewModel". Так как и My1Property, а не My1_Property и т.п. Не видел уже лет 100 чтобы "_" использовали в названиях. 3) между предыдущим кодом и комментарием следующего кода (свойства) лучше перенос использовать. Иначе нечитабельно, особенно когда кода очень много. Добавлено через 1 час 34 минуты ).Нигде не вижу примеров где бы это советовали и использовали. Повидимому это какой-то специфичный подход. Даже не представляю пока где бы это использовать. Что такое "на стадии разработки"? их потом нужно убрать? В этом блоке (про VMDD, ":d" префикс, notifyproperty и пример кода) помоему собрано много тем сразу, которые желательно описать раздельно. А то складывается ощущение что это единственно верный подход.
0
|
||||
|
Модератор
|
|||||
| 06.01.2019, 17:19 [ТС] | |||||
|
А как Вы заполняете значениями элементы во время разработки (в редакторе WPF)? Или они у Вас пустые? Всё что с префиксом d: используется только в редакторе. Это в код не попадает. Я обычно заполняю VMDD в словаре XAML и потом подключаю по ключу. Редактирование становится намного удобнее. Ведь на этапе создания View ещё не создана ViewModel. А с VMDD есть к чему делать привязки, WPF конструктор видит нужные свойства. Отлаживать View тоже можно без VuewModel. Очень удобно. Может когда созрею до среднечка, то продолжу эти темы. А пока не тяну. Мне бы самому кто-нибудь помог, в то числе с Prism, MVVMLight.
0
|
|||||
|
|
|||||||||||||||||
| 06.01.2019, 17:41 | |||||||||||||||||
А сейчас вот периодически использую или через Locator или как в этом коде. Самое простое подключение. или через "шапку" или код-блок. "Шапка" короче получается.
А тот код о котором я говорил - ваш VMDD пример. Он напоминает сотворение вьюмодели прямо в разметке. Тут и модель, тут и свойства, тут и какое-то наполнение. Вот мне и не понятно стало - это использование на момент разработки или вообще где-то так стали практиковать? Добавлено через 9 минут Про "шапку" ошибонька. Там конечно же не так - нужно в классе иметь поле, а потом в "шапке" её биндить.
0
|
|||||||||||||||||
|
Модератор
|
|||
| 06.01.2019, 17:44 [ТС] | |||
|
Честно говоря, Вы меня озадачили.... Я думал это типичный подход... Тем более что во многом мне помогли и направили "мастера этого дела". Что касается подключения реальной VM не в коде, а в XAML. Во многих случаях это возможно (тем более в простых у начинающих) и удобно. Прививает навыки работы с XAML, отсутствие которых частая проблема начинающих на WPF. Можно биндить как Вы показали. Но принципиальная разница какая?
0
|
|||
|
Заблокирован
|
|
| 06.01.2019, 19:44 | |
|
0
|
|
|
|
||
| 06.01.2019, 20:03 | ||
|
А вообще почему я на это внимание обратил? - я всегда видел строчку mc:Ignorable="d", и никогда не видел чтобы она использовалась. И тут бац! в ваших текстах, и так активно используется. Конечно это меня заинтересовало.
0
|
||
|
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
|
|
| 06.01.2019, 20:13 | |
|
0
|
|
|
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
|
|
| 06.01.2019, 20:53 | |
|
0
|
|
|
Модератор
|
||
| 06.01.2019, 22:24 [ТС] | ||
|
Добавлено через 5 минут Можно установить два источника данных. Один на время дизайна для работы редактора, конструктора. Другой для реального исполнения.
0
|
||
|
196 / 41 / 24
Регистрация: 24.02.2013
Сообщений: 231
|
|||||||||||
| 27.02.2019, 12:50 | |||||||||||
|
Можно узнать что происходит тут?
0
|
|||||||||||
|
Модератор
|
||||||||||||
| 27.02.2019, 15:41 [ТС] | ||||||||||||
|
Пример:
1
|
||||||||||||
|
196 / 41 / 24
Регистрация: 24.02.2013
Сообщений: 231
|
||||||
| 27.02.2019, 15:53 | ||||||
|
А вот эта строка? получаем массив названий имен свойств ?
0
|
||||||
|
В поиске
104 / 52 / 17
Регистрация: 20.04.2014
Сообщений: 826
|
|
| 06.05.2019, 19:20 | |
|
Люди добрые объясните очень далекому человеку для чего в этом примере FuzzySearch_VM_DataDesigner и FuzzySearch_VM все перечитал ни могу вразумить не как возникает ощущение что FuzzySearch_VM_DataDesigner это как интерцейс но зачем? делать какую то слабую связь?
0
|
|
|
Модератор
|
||
| 06.05.2019, 20:47 [ТС] | ||
|
Если делать по максимуму (в смысле подробностей), то, конечно, нужно сначала сделать интерфейсы от Модели к VM и от VM к View. Но в View нельзя заполнить интерфейс экземплярами. Поэтому для отладки View (проверить как она смотрится с теми или иными значениями, как скрываются элементы, меняются цвета, адаптируются размеры и т.д) надо создать какую-то реализацию этого интерфейса, чтобы можно было заполнить её значениями и какой-то логикой в пределах View. И уже на этом отладить View. В большинстве случаев, от этой реализации можно создать уже реальную VM как производный класс и тогда останется прописать только часть VM обращённую к Модели. В данном случае так и сделано. Создана FuzzySearch_VM_DataDesigner. В ней полностью реализован интерфейс для подключения View. Она использована для отладки View. Изменяя значения её свойств в XAML можно видеть как на это реагирует View. То есть это фактически часть View. После того как добились нужного результата, создали производный от него класс FuzzySearch_VM и дописали часть работающую с Моделью.
0
|
||
| 06.05.2019, 20:47 | |
|
Ищу пример wpf MVVM добавления записей в таблицу DataGrid Структура WPF приложения на MVVM Паттерн MVVM или как писать приложения на WPF Создание приложения "Штатное Расписание" в паттерне MVVM [WPF, Элд Хасп] Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|