我有一个主视图包含多个子视图的应用程序。这些视图有一个相应的 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 以外的东西吗?
实现这一目标的最有效方法是什么?
噜噜哒
相关分类