1 | |
.NET 4.x Множество ViewModel31.07.2016, 20:54. Показов 841. Ответов 13
Метки нет (Все метки)
Есть у меня 3 основных UserControl-а, во всех их содержится ещё кучка одинаковых UserControl-ов (+- 1)
Каким образом организуется правильное MVVM в таком случае? Т.е. при помещении одинаковых UserControl-ов в несколько мест по приложению у меня сейчас происходит с дубляжом всех привязанных свойств, коллекций, методов во ViewModel. Это правильно? А как правильно?
0
|
31.07.2016, 20:54 | |
Ответы с готовыми решениями:
13
Как из ViewModel UserControl'a изменить свойство в ViewModel главного окна? Mvvm ViewModel в ViewModel Binding к ViewModel ViewModel и UserControl |
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
|
|
01.08.2016, 00:50 | 2 |
skilllab, со слов, честно говоря, не очень понятно. Накидайте примерчик, в котором покажите, как Вы делаете и что непонятно.
0
|
01.08.2016, 08:08 [ТС] | 3 |
Легко!
Примерчик, естественно, сильно утрирован. В реальности окна создаются независимо, т.е. ничего никуда не передаётся как параметр. И в окне AnotherWindow и в MainWindow используется один и тот же контрол TextInputView .Если контрол превращается в 20 полей, 10 текстбоксов, то его переиспользование (как говорят омериканцы ReUsable) приведёт к сотням строк в разных ViewModel
0
|
Жуткая тВарЬ
|
|
01.08.2016, 11:41 | 4 |
Ну как то так:
ManyControls.zip Обязательно обратить внимание на то что запуск главного окна перенесен в App.cs. Так же замечу, что знать ViewModel о существовании View не должна и вызовы типа new View() внутри вьюмоделей не допустимы, для таких вещей есть свои методы и шаблоны, которые хорошо разделяют бизнес логику, представления и управление представлениями П.С. Вообще для более менее сложных манипуляций с данными надо хорошенько изучить тему Внедрения зависимостей и управление ими с помощью IoC контейнеров.
0
|
Жуткая тВарЬ
|
|
01.08.2016, 12:35 | 6 |
Так сделайте типизированную коллекцию и общайтесь с ней, просто по Вашему описанию сложно представить картину, что именно требуется, в конце концов разным вьюшкам можно просто передавать один и тот же экземпляр вьюмодели и получите полностью синхронные вьюшки
0
|
01.08.2016, 12:55 [ТС] | 7 |
У меня есть свои Onpropertychange для каждого из свойств VM. К примеру, при изменении OnSelectedItemChange для одного комбобокса, другой заполняется новой коллекцией в зависимости от того, какой Item селектнут. Данные для коллекций вообще поступают из SQL. Комбобоксов больше 10. Сгруппированы по 3. К каждому привязано свойство VM и коллекция VM. Типизированная коллекция - это как?
Одна вьюшка создана сейчас, отработала, выгрузилась, потом вступает другая вьюшка со своими данными. Добавлено через 12 минут И как потом с помощью неё отдельно отрабатывать изменения для каждого из элементов индивидуально?
0
|
Жуткая тВарЬ
|
|
01.08.2016, 13:02 | 8 |
Такие вещи решаются на уровне грамотно спроектированной модели данных и в целом могут управляться одной вьюмоделью - создавать viewmodel для каждого комбобокса это простите фигня какая то !
Сложно, что то советовать не имея понятия, что там у вас с данными (а откуда они грузятся это вообще не важно, для этого есть слои доступа к данным) Можете конечно скинуть проект мне на почту, если там не совсем все плохо я посмотрю в свободное время. Добавлено через 1 минуту Это коллекция параметризированная каким либо типом, например IList<T>, тип вполне может представлять свойство или еще что то +)
1
|
01.08.2016, 13:04 [ТС] | 9 |
Да нет же)))
Т.е. имеем 3 ViewModel, в каждой из них дублируются свойства, которые нужны для общения Model с View из-за одинакового UserControl
Добавлено через 1 минуту Эммм, если одно свойство string, другое int, третье вообще класс модели. Это всё в <T> не загонишь. Я потому и переспросил что вы под этим подразумевали.
0
|
Жуткая тВарЬ
|
|
01.08.2016, 13:06 | 10 |
Загонишь если эти свойства упакованы в нужный тип.
Добавлено через 42 секунды Тут вопрос подхода - я повторюсь, что не знаю что у вас там с данными и как с ними надо работать
0
|
01.08.2016, 13:09 [ТС] | 11 |
Хотяя.....навели вы меня на мысль, что может реально сделать BaseViewModel. а у каждой вьюшки (имплементировать эту BaseViewModel) добавлять лишь те свойства, которые необходимы конкретной вьюшке и которые не используются для UserControl
Добавлено через 2 минуты Спасибо за помощь, но там эта часть проекта очень мала в сравнении со всем остальным. Нужны доп программы, нужна установка, нужен SQL.
0
|
Жуткая тВарЬ
|
|
01.08.2016, 13:21 | 14 |
1
|
01.08.2016, 13:21 | |
01.08.2016, 13:21 | |
Помогаю со студенческими работами здесь
14
Десериализация ViewModel ViewModel: RelayCommand и метод MVVM и свойство из ViewModel Активация окна из ViewModel Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |