亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從子視圖的 ViewModel 中引發 ViewModel 中的事件

如何從子視圖的 ViewModel 中引發 ViewModel 中的事件

C#
蠱毒傳說 2023-04-29 15:33:34
我有一個主視圖包含多個子視圖的應用程序。這些視圖有一個相應的 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 );
}


查看完整回答
反對 回復 2023-04-29
  • 1 回答
  • 0 關注
  • 131 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號