Общий подход к обмену данными между двумя ViewModels заключается в следующем: MVVM - просмотр связи модели с представлением модели
Шаблон Mediator или класс Messenger. Но как насчет 6 ViewModels в одном окне?
- NewSchoolclassUserControl
- NewPupilUserControl
- SchoolclassListUserControl
- PupilListUserControl
- PupilsDetailUserControl
- AdministrationButtonBarUserControl
(с кнопками выполнения команд)
Все это в одном окне. Действительно ли "вы" говорите мне сейчас, что я должен настроить Messenger для этих 6 видов и их Viewodels? Это было бы ужасно ...
6 UserControls в одном окне, даже в крупном корпоративном приложении нет больше UserControls в окне, так что в этом случае принято / рекомендуется?
Мне было бы интересно мнение кого-то, имеющего опыт работы с большими mvvm-приложениями:)
Некоторые из этих UserControl + ViewModels, которые я хотел бы использовать в других местах моего приложения. Так что все в одном UserControl - это не то, чего я действительно хочу.
ОБНОВЛЕНИЕ : для слепого мейса; -)
private DateTime _selectedDate;
public DateTime SelectedDate
{
get { return _selectedDate; }
set
{
if (_selectedDate == value)
return;
_selectedDate = value;
this.RaisePropertyChanged("SelectedDate");
ObservableCollection<Period> periods = _lessonplannerRepo.GetLessonDayByDate(SelectedDate);
_periodListViewModel = new ObservableCollection<PeriodViewModel>();
foreach (Period period in periods)
{
PeriodViewModel periodViewModel = new PeriodViewModel(period);
foreach (DocumentListViewModel documentListViewModel in periodViewModel.DocumentViewModelList)
{
documentListViewModel.DeleteDocumentDelegate += new Action<List<Document>>(OnDeleteDocument);
documentListViewModel.AddDocumentDelegate += new Action(OnAddDocument);
documentListViewModel.OpenDocumentDelegate += new Action<Document>(OnOpenDocument);
}
_periodListViewModel.Add(periodViewModel);
}
}
}
@ blindmeise
Эта ViewModel фактически преобразована в DataGrid. Периоды - это строки. В каждой строке есть столбец с названием «Документы». У меня есть PeriodListViewModel 1: N DocumentListViewModel.
DocumentListViewModel помечается датой с помощью UserControl, содержащего ListBox и под некоторыми кнопками add / del / save / open и т. Д. *
DocumentListViewModel имеет делегаты Commands и Action, выполняемые в "LessonController", поэтому каждое действие в документе, такое как add, del и т. Д. ..., может быть выполнено в SelectedPeriodViewModel, объявленном в LessonController.
Приведенный выше код просто загружает новые данные из базы данных, когда пользователь изменяет дату в указателе даты.
Вам нужно больше кода или что вы скажете о моем подходе? Я стремлюсь учиться и рад каждому критику!