我有一個主視圖包含多個子視圖的應用程序。這些視圖有一個相應的 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 關注
- 131 瀏覽
添加回答
舉報
0/150
提交
取消