Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 另一个父UserControl对网格中多个子UserControl的事件处理_Wpf_Events_C# 4.0_Mvvm_User Controls - Fatal编程技术网

Wpf 另一个父UserControl对网格中多个子UserControl的事件处理

Wpf 另一个父UserControl对网格中多个子UserControl的事件处理,wpf,events,c#-4.0,mvvm,user-controls,Wpf,Events,C# 4.0,Mvvm,User Controls,在我的WPF应用程序MVVM模式中,我试图处理来自多个UCs的事件,称之为主UC中的子UC,称之为父类布局管理器。每个子项都有一个事件告诉父项关闭子项。看起来是这样的: 父视图 | -儿童视图 | -儿童视图 | -等等。 和Josh Smith一样,我在close命令中使用了一个workspace viewmodel,ParentView和ChildView继承自WorkspaceViewModel,当然它自己也继承自ViewModelBase。现在的问题是,每当我关闭一个孩子。Request

在我的WPF应用程序MVVM模式中,我试图处理来自多个UCs的事件,称之为主UC中的子UC,称之为父类布局管理器。每个子项都有一个事件告诉父项关闭子项。看起来是这样的: 父视图 | -儿童视图 | -儿童视图 | -等等。 和Josh Smith一样,我在close命令中使用了一个workspace viewmodel,ParentView和ChildView继承自WorkspaceViewModel,当然它自己也继承自ViewModelBase。现在的问题是,每当我关闭一个孩子。RequestClose事件列表由父视图而不是子视图调用。但该事件已注册到该子级。WorkspaceViewModel中的RequestClose怎么可能由子级而不是父级调用? 我必须在我的问题描述中添加以下内容:在这种情况下,我打破了MVVM模式,并在ParentView的代码隐藏中添加了我的ChildView:

parentViewGrid.Children.Add(childView)
不幸的是,在这种情况下,很难遵循MVVM模式。原因如下:。我还没有真正解决那个问题。换句话说,就性能和复杂性而言,在这种情况下遵循MVVM模式是有利还是不利是值得怀疑的。 希望你能帮助我,理解我的问题。提前谢谢。 凯

像乔希·史密斯一样,我使用的是一个工作区 关闭命令的viewmodel和 ParentView和ChildView继承自 WorkspaceViewModel本身 从的ViewModelBase继承 当然

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

而且,我认为你的代码没有问题 parentViewGrid.Children.AddchildView

。。。只要您将视图代码保留在视图中,而不是直接与特定ViewModels中的特定ViewModel属性混淆/绑定

最后,这只是我吹毛求疵,但我不喜欢将事件命名为RequestClose,为什么不将其更改为标准关闭或至少CloseRequested