[英]How to raise an event in a ViewModel from within a subview's ViewModel
我有一個帶有主視圖的應用程序,其中包含幾個子視圖。 視圖具有對應的ViewModel,該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之外的其他東西?
最有效的方法是什么?
使用EventAggregator
教科書示例,盡管我應該補充一點,子視圖模型也是先進行視圖模型的教科書示例。 ViewModelLocator
對於獨立的頂層ViewModelLocator
最有用。
話雖這么說,在子視圖模型中:
_eventAggregator.GetEvent<MySubViewEvent>().Publish();
別的地方:
public MainViewModel( IEventAggregator eventAggregator )
{
eventAggregator.GetEvent<MySubViewEvent>().Subscribe( OnSubViewEvent );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.