另一个父UserControl在网格中对多个子UserControls进行事件处理

时间:2011-01-24 10:33:24

标签: wpf events c#-4.0 mvvm user-controls

在我的WPF应用程序(MVVM模式)中我正在尝试处理来自主UC中的几个UC(称为子)的事件,称之为父(布局管理器的种类)。每个孩子都有一个事件告诉父母关闭孩子。看起来像这样:
ParentView
|
- ChildView
|
- ChildView
|
- 等 和Josh Smith一样,我正在使用工作区视图模型来执行close命令,而ParentView和ChildView继承自WorkspaceViewModel(当然它自己继承自ViewModelBase)。现在,问题是每当我关闭一个孩子。 RequestClose事件由ParentView调用,而不是由ChildView调用。但该事件已登记给孩子。 WorkspaceViewModel中的RequestClose如何被子进程调用而不是父进程调用? 我必须添加到我的问题描述中,在这种情况下,我打破MVVM模式并在ParentView的代码隐藏中添加我的ChildView:

parentViewGrid.Children.Add(childView)

在这种情况下,遗憾的是,几乎不可能遵循MVVM模式。原因如下:Polyline and MVVM。我还没有真正解决这个问题。换句话说,在这种情况下遵循MVVM模式在性能和复杂性方面是优势还是劣势是值得怀疑的。
希望你能帮助我,理解我的问题。提前谢谢。

1 个答案:

答案 0 :(得分:0)

  像约什史密斯一样,我正在使用工作空间   用于关闭命令的viewmodel和    ParentView和ChildView继承自   WorkspaceViewModel (自己   继承自ViewModelBase   课程)。

我认为你的观点应该继承你的ViewModel类。如果有的话,您的视图应将其DataContext属性设置为您的ViewModel。

另外,恕我直言你的代码没有任何问题 parentViewGrid.Children.Add(childView)

...只要您在View中保留View代码,而不是直接使用特定ViewModel中的特定ViewModel属性进行混乱/绑定。

最后,这只是我的挑剔,但我不喜欢将事件命名为RequestClose,为什么不将其更改为标准Closing或至少CloseRequested