這個問題在這里已經有了答案: 在 WPF MVVM [關閉] 3 個答案 中通信兩個視圖模型 MVVM 最佳實踐:視圖模型之間的通信 2 個答案 5 天前關閉。
此貼4天前編輯提交審核,未能重新開貼:
原始關閉原因未解決
幫助你理解的圖片
在名為 A 的 UserControl 中有 B Window 和 B ViewModel。我想在 B 視窗中的 selectedItem 更改時在 A 視圖模型中知道。(或在 A 視圖模型中引發事件)最好的方法是什么?
B 視窗組合框
<ComboBox Height="30" ItemsSource="{Binding ModelCollection}"
DisplayMemberPath="Name"
SelectedItem="{Binding Model}"/>
進一步修改
謝謝回復。請檢查這是否是一個好方法。
主視圖模型
Children1.OnContentChanged = new Children1.SelectedInfoChanged(Children2.SelectEvent);
兒童1
public delegate void SelectedInfoChanged(Info info);
public event SelectedInfoChanged OnContentChanged;
public Info SelectInfo
{
get { return _selectInfo; }
set
{
if(SelectInfo != value)
_selectInfo = value;
OnContentChanged(_selectInfo);
}
}
}
兒童2
public void SelectEvent(Info info)
{
}
uj5u.com熱心網友回復:
最好的方法是什么?
一種常見的解決方案是在事件/訊息的發布者和訂閱者之間引入事件聚合器或信使。然后訂閱者和發布者只知道事件聚合器。他們對彼此一無所知,這意味著他們可以相互獨立地進化。這反過來會導致松散耦合,這從維護的角度來看是很好的。
有關該概念的更多資訊,請參閱此博客文章。
另一個類似的選擇是向您的視圖模型(或其他組件)注入共享服務,并使用該服務在它們之間進行通信。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/489994.html
上一篇:WPF實時重繪文本資料