两个 ViewModel 之间通信的常用方法是:MVVM- View Model-View Model Communications
中介者模式或信使类。但是一个窗口中有 6 个 ViewModel 呢?
- 新学校类用户控件
- 新瞳孔用户控件
- SchoolclassListUserControl
- 瞳孔列表用户控件
- 学生详细信息用户控件
- AdministrationButtonBarUserControl(具有执行命令的按钮)
所有这些都在一个窗口中。“你”现在真的告诉我我必须为这 6 个视图及其 Viewodels 设置一个 Messenger 吗?那将是可怕的...
一个窗口中有 6 个用户控件,即使是大型企业应用程序在一个窗口中也没有更多的用户控件,那么在这种情况下,什么是公认的/最佳实践?
我会对具有大型 mvvm 应用程序经验的人的意见感兴趣:)
其中一些 UserControl+ViewModel 我想在我的应用程序的其他地方重用。因此,将所有内容放在一个 UserControl 中并不是我真正想要的。
更新:对于盲目的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 实际上是一个 DataGrid 的数据模板。期间是行。每行都有一个名为 Documents 的列。我有一个 PeriodListViewModel 1 : N DocumentListViewModel。
DocumentListViewModel 使用包含 ListBox 的 UserControl 进行数据模板化,并在一些按钮下方添加/删除/保存/打开等...
DocumentListViewModel 具有在“LessonController”中执行的命令和操作委托,因此对 Document 的每个操作(如 add、del 等)都可以在 LessonController 中声明的 SelectedPeriodViewModel 上完成。
上面的代码只是在用户更改日期选择器中的日期时从数据库中加载新数据。
您是否需要更多代码,或者您对我的方法有何看法?我渴望学习,我为每一个批评者感到高兴!