我有一个主视图包含多个子视图的应用程序。这些视图有一个相应的 ViewModel,它显示模型中包含的一些数据和监控事件。假设主视图如下所示:<UserControl x:Class="MyView" Name="myView"> <StackPanel> <local:MySubView Name="mySubView" someProperty="{Binding DataContext.someField, ElementName=myView}"/> [...] </StackPanel></UserControl>子视图如下所示:<UserControl x:Class="MySubView" prism:ViewModelLocator.AutoWireViewModel="True"> [...]</UserControl>然后在 MySubViewModel.cs 中,发生了一些事件,并使用参数调用了一个函数:public Event EventHandler<SomeClass> MySubViewEvent;[...]void foo() { SomeClass o = new SomeClass(...); MySubViewEvent.Invoke(this, o);}现在,在 MyViewModel.cs 中,我没有对子视图的直接引用,因此不能说类似subViewModel.MySubViewEvent += OnSubViewEvent;void OnSubViewEvent(object sender, SomeClass param) { ... }我可以将一些属性添加到 MySubViewModel 并使其依赖于具有依赖属性的 MyViewModel 中的某个字段,但是 1. 我怎样才能反过来做,以便在引发事件时在 MyViewModel 中调用某些回调或事件处理程序在 MySubViewModel 中,以及 2. 我可以以某种方式将事件处理程序作为依赖属性传递吗?或者我应该为此使用 DependencyProperties 以外的东西吗?实现这一目标的最有效方法是什么?
1 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
使用 的教科书示例EventAggregator
,但我应该补充一点,子视图模型也是先查看模型的教科书示例。ViewModelLocator
对于独立的顶级视图最有用...
话虽如此,在子视图模型中:
_eventAggregator.GetEvent<MySubViewEvent>().Publish();
别的地方:
public MainViewModel( IEventAggregator eventAggregator ) { eventAggregator.GetEvent<MySubViewEvent>().Subscribe( OnSubViewEvent ); }
- 1 回答
- 0 关注
- 110 浏览
添加回答
举报
0/150
提交
取消