Общий подход для связи между 2 ViewModels заключается в следующем: MVVM- View Model-View Model CommunicationsСвязь между 6 ViewModels и Messenger == AntiPattern?
Модель посредника или класс Messenger. Но как насчет 6 ViewModels в одном окне?
- NewSchoolclassUserControl
- NewPupilUserControl
- SchoolclassListUserControl
- PupilListUserControl
- PupilsDetailUserControl
- AdministrationButtonBarUserControl (имеющие кнопки выполнения команд)
Все это в ОДНОМ окне. «Ты» действительно скажи мне сейчас, мне нужно настроить Messenger для этих 6 просмотров и их просмотра? Это было бы ужасно ...
6 UserControls в одном окне, даже большое корпоративное приложение не имеет большего количества UserControls в окне, так что же приемлемая/лучшая практика в этом случае?
я был бы заинтересован в чьем-то мнении, имеющий опыт работы с большими MVVM приложениями :)
Некоторые из этих UserControl + ViewModels Я хотел бы повторно использовать в других местах моего приложения. Так что положить все в один UserControl - это не то, чего я действительно хочу.
UPDATE: для слепых Meise ;-)
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 является datatemplated фактически к DataGrid. Периоды - это строки. Каждая строка имеет столбец под названием «Документы». У меня есть PeriodListViewModel 1: N DocumentListViewModel.
DocumentListViewModel является datatemplated с UserControl, содержащей ListBox и ниже некоторые кнопки добавить/дела/сохранить/открыть и т.д ...
DocumentListViewModel имеет команды и действия делегатов, выполненные в «LessonController» так каждое действие на документ, подобный add, del и т. д., может быть выполнен на элементе SelectedPeriodViewModel, объявленном в LessonController.
Приведенный выше код просто загружает новые данные из базы данных, когда пользователь меняет дату в datepicker.
Вам нужно больше кода или что вы скажете о моем подходе? Я очень хочу учиться, и я рад каждому критику!
Нет ничего плохого в отношении 6 или 60 элементов управления пользователя в одном окне. Существуют только удобные и непригодные для использования пользовательские интерфейсы. –