294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,989
Записей в блоге: 1
1
.NET 4.x

Множество ViewModel

31.07.2016, 20:54. Показов 841. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть у меня 3 основных UserControl-а, во всех их содержится ещё кучка одинаковых UserControl-ов (+- 1)
Каким образом организуется правильное MVVM в таком случае?

Т.е. при помещении одинаковых UserControl-ов в несколько мест по приложению у меня сейчас происходит с дубляжом всех привязанных свойств, коллекций, методов во ViewModel. Это правильно? А как правильно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2016, 20:54
Ответы с готовыми решениями:

Как из ViewModel UserControl'a изменить свойство в ViewModel главного окна?
Недавно начал попытки создавать приложение WPF с применением MVVM, и у меня возник вопрос, который...

Mvvm ViewModel в ViewModel
Есть одно окошко там много вкладок, в каждой вкладке есть подвкладки и там много разных таблиц и...

Binding к ViewModel
Класс ViewModel задаётся через конструктор MainWindow(class Window) в его DataContext. Кнопка...

ViewModel и UserControl
Добрый день. Помогить немного разобрать, а то мне кажется, что я сам себя уже начинаю запутывать....

13
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
01.08.2016, 00:50 2
skilllab, со слов, честно говоря, не очень понятно. Накидайте примерчик, в котором покажите, как Вы делаете и что непонятно.
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,989
Записей в блоге: 1
01.08.2016, 08:08  [ТС] 3
Легко!
Примерчик, естественно, сильно утрирован. В реальности окна создаются независимо, т.е. ничего никуда не передаётся как параметр.

И в окне AnotherWindow и в MainWindow используется один и тот же контрол TextInputView.
Если контрол превращается в 20 полей, 10 текстбоксов, то его переиспользование (как говорят омериканцы ReUsable) приведёт к сотням строк в разных ViewModel
Вложения
Тип файла: zip ManyControls.zip (92.8 Кб, 1 просмотров)
0
Жуткая тВарЬ
393 / 328 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
01.08.2016, 11:41 4
Ну как то так:
ManyControls.zip

Обязательно обратить внимание на то что запуск главного окна перенесен в App.cs. Так же замечу, что знать ViewModel о существовании View не должна и вызовы типа new View() внутри вьюмоделей не допустимы, для таких вещей есть свои методы и шаблоны, которые хорошо разделяют бизнес логику, представления и управление представлениями

П.С. Вообще для более менее сложных манипуляций с данными надо хорошенько изучить тему Внедрения зависимостей и управление ими с помощью IoC контейнеров.
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,989
Записей в блоге: 1
01.08.2016, 12:25  [ТС] 5
Цитата Сообщение от amarf Посмотреть сообщение
вызовы типа new View()
Цитата Сообщение от skilllab Посмотреть сообщение
Примерчик, естественно, сильно утрирован
По поводу кода, представьте что используется не одно свойство User, а громадная куча string свойств, к примеру 20))
0
Жуткая тВарЬ
393 / 328 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
01.08.2016, 12:35 6
Цитата Сообщение от skilllab Посмотреть сообщение
По поводу кода, представьте что используется не одно свойство User, а громадная куча string свойств, к примеру 20))
Так сделайте типизированную коллекцию и общайтесь с ней, просто по Вашему описанию сложно представить картину, что именно требуется, в конце концов разным вьюшкам можно просто передавать один и тот же экземпляр вьюмодели и получите полностью синхронные вьюшки
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,989
Записей в блоге: 1
01.08.2016, 12:55  [ТС] 7
Цитата Сообщение от amarf Посмотреть сообщение
сделайте типизированную коллекцию и общайтесь с ней
У меня есть свои Onpropertychange для каждого из свойств VM. К примеру, при изменении OnSelectedItemChange для одного комбобокса, другой заполняется новой коллекцией в зависимости от того, какой Item селектнут. Данные для коллекций вообще поступают из SQL. Комбобоксов больше 10. Сгруппированы по 3. К каждому привязано свойство VM и коллекция VM. Типизированная коллекция - это как?

Цитата Сообщение от amarf Посмотреть сообщение
разным вьюшкам можно просто передавать один и тот же экземпляр вьюмодели
Цитата Сообщение от skilllab Посмотреть сообщение
т.е. ничего никуда не передаётся как параметр.
Одна вьюшка создана сейчас, отработала, выгрузилась, потом вступает другая вьюшка со своими данными.

Добавлено через 12 минут
Цитата Сообщение от skilllab Посмотреть сообщение
Типизированная коллекция - это как?
И как потом с помощью неё отдельно отрабатывать изменения для каждого из элементов индивидуально?
0
Жуткая тВарЬ
393 / 328 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
01.08.2016, 13:02 8
Цитата Сообщение от skilllab Посмотреть сообщение
Комбобоксов больше 10. Сгруппированы по 3. К каждому привязано свойство VM и коллекция VM. Типизированная коллекция - это как?
Такие вещи решаются на уровне грамотно спроектированной модели данных и в целом могут управляться одной вьюмоделью - создавать viewmodel для каждого комбобокса это простите фигня какая то !
Сложно, что то советовать не имея понятия, что там у вас с данными (а откуда они грузятся это вообще не важно, для этого есть слои доступа к данным)
Можете конечно скинуть проект мне на почту, если там не совсем все плохо я посмотрю в свободное время.

Добавлено через 1 минуту
Цитата Сообщение от skilllab Посмотреть сообщение
Типизированная коллекция - это как?
Это коллекция параметризированная каким либо типом, например IList<T>, тип вполне может представлять свойство или еще что то +)
1
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,989
Записей в блоге: 1
01.08.2016, 13:04  [ТС] 9
Цитата Сообщение от amarf Посмотреть сообщение
создавать viewmodel для каждого комбобокса это простите фигня какая то
Да нет же)))
Цитата Сообщение от skilllab Посмотреть сообщение
при помещении одинаковых UserControl-ов в несколько мест по приложению у меня сейчас происходит с дубляжом всех привязанных свойств, коллекций, методов во ViewModel
Т.е. имеем 3 ViewModel, в каждой из них дублируются свойства, которые нужны для общения Model с View из-за одинакового UserControl

Добавлено через 1 минуту
Цитата Сообщение от amarf Посмотреть сообщение
IList<T>
Эммм, если одно свойство string, другое int, третье вообще класс модели. Это всё в <T> не загонишь. Я потому и переспросил что вы под этим подразумевали.
0
Жуткая тВарЬ
393 / 328 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
01.08.2016, 13:06 10
Цитата Сообщение от skilllab Посмотреть сообщение
Эммм, если одно свойство string, другое int, третье вообще класс модели. Это всё в <T> не загонишь.
Загонишь если эти свойства упакованы в нужный тип.

Добавлено через 42 секунды
Тут вопрос подхода - я повторюсь, что не знаю что у вас там с данными и как с ними надо работать
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,989
Записей в блоге: 1
01.08.2016, 13:09  [ТС] 11
Цитата Сообщение от amarf Посмотреть сообщение
могут управляться одной вьюмоделью
Хотяя.....навели вы меня на мысль, что может реально сделать BaseViewModel. а у каждой вьюшки (имплементировать эту BaseViewModel) добавлять лишь те свойства, которые необходимы конкретной вьюшке и которые не используются для UserControl

Добавлено через 2 минуты
Цитата Сообщение от amarf Посмотреть сообщение
проект мне на почту
Спасибо за помощь, но там эта часть проекта очень мала в сравнении со всем остальным. Нужны доп программы, нужна установка, нужен SQL.
0
Жуткая тВарЬ
393 / 328 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
01.08.2016, 13:11 12
Цитата Сообщение от skilllab Посмотреть сообщение
Спасибо за помощь, но там эта часть проекта очень мала в сравнении со всем остальным. Нужны доп программы, нужна установка, нужен SQL.
Что бы смотреть код - не нужны доп программы и т.п., тем более, что можно наклепать заглушек для всего этого великолепия
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,989
Записей в блоге: 1
01.08.2016, 13:12  [ТС] 13
Цитата Сообщение от amarf Посмотреть сообщение
можно наклепать заглушек
грешен, далёк я от этого дела
Ну, если пойдёт вырванный нерабочий кусок, то запакую. Спасибо большое. Дальше через личку?
0
Жуткая тВарЬ
393 / 328 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
01.08.2016, 13:21 14
Цитата Сообщение от skilllab Посмотреть сообщение
Ну, если пойдёт вырванный нерабочий кусок, то запакую. Спасибо большое. Дальше через личку?
через почту - она у меня в профиле
1
01.08.2016, 13:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2016, 13:21
Помогаю со студенческими работами здесь

Десериализация ViewModel
Добрый день. Подскажите, возможно ли выполнить десериализацию ViewModel для mvvm? public...

ViewModel: RelayCommand и метод
Привет всем, Элд Хасп, Я закрывал окно в Сode Behind таким образом. Теперь использую...

MVVM и свойство из ViewModel
не могу понять где хранятся объекты из ViewModel есть класс с СМСками public class SmsViewModel...

Активация окна из ViewModel
Есть ли лучший способ сделать активацию окна из под ViewModel? (желательно не нарушая принципы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru