|
Модератор
|
||||||||||||||||||||||||||||||||||||||||||
Пример реализации WPF+MVVM приложения26.12.2018, 06:04. Показов 45371. Ответов 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, Элд Хасп] Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|