gpt4 book ai didi

c# - 如何在 subview 的ViewModel中引发ViewModel中的事件

转载 作者:行者123 更新时间:2023-12-03 11:01:59 26 4
gpt4 key购买 nike

我有一个带有主 View 的应用程序,其中包含几个 subview 。 View 具有对应的ViewModel,该ViewModel显示一些数据并监视模型中包含的事件。

假设主 View 如下所示:

<UserControl x:Class="MyView" Name="myView">
<StackPanel>
<local:MySubView Name="mySubView" someProperty="{Binding DataContext.someField, ElementName=myView}"/>
[...]
</StackPanel>
</UserControl>

subview 如下所示:

<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中,我没有对 subview 的直接引用,因此无法说出类似
subViewModel.MySubViewEvent += OnSubViewEvent;

void OnSubViewEvent(object sender, SomeClass param) { ... }

我可以向MySubViewModel中添加一些属性,并使其具有依赖项属性,以依赖于MyViewModel中的某个字段,但是1.如何以另一种方式做到这一点,以便在引发事件时在MyViewModel中调用某些回调或事件处理程序在MySubViewModel中,以及2.我可以以某种方式将事件处理程序作为依赖项属性传递吗?

还是我应该使用DependencyProperties之外的其他东西?

最有效的方法是什么?

最佳答案

使用EventAggregator的教科书示例,尽管我应该补充一点, subview 模型也是先进入 View 模型的教科书示例。 ViewModelLocator对独立的顶层 View 最有用...

话虽这么说,在 subview 模型中:

_eventAggregator.GetEvent<MySubViewEvent>().Publish();

别的地方:
public MainViewModel( IEventAggregator eventAggregator )
{
eventAggregator.GetEvent<MySubViewEvent>().Subscribe( OnSubViewEvent );
}

关于c# - 如何在 subview 的ViewModel中引发ViewModel中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56705088/

26 4 0
文章推荐: c# - 包含List 作为项目源的DisplayMember组合框