[英]Setting property of child viewmodel from parent
我有一個視圖,我將其稱為View1,它具有一個嵌套的用戶控件,該控件將被稱為View2。 我的主應用程序創建並顯示View1,這又創建了View2,因為它是View1上的用戶控件。 View1和View2都有自己的視圖模型。 我需要做的是從View1的viewmodel到View2的viewmodel中獲取一個值。
View2是一個完全獨立的控件,具有自己的功能,可以在其他任何視圖中重用,但無論包含在哪個視圖中,它都需要一條信息。在這里給出的情況下,它就是View1。
我的第一次嘗試是在View2上創建依賴項屬性,以便可以在View1中進行設置,如下所示:
<myUserControls:View2 MyProperty="{Binding RelativeSource={RelativeSource Self}, Path=Parent.DataContext.MyProperty}"/>
這可以設置依賴項屬性,但這無助於將屬性值獲取到我可以在其中使用的View2的viewmodel中。
如果有任何區別,我將在Silverlight中執行此操作。
有人知道有沒有辦法做到這一點?
我建議使用“介體”模式,或在視圖模型之間進行某種形式的通信。 我個人已使用Galasoft MVVM輕信息傳遞取得了巨大的成功。 雷切爾(Rachel)在導航方面也寫了一個不錯的博客: 雷切爾(Rachel)的MVVM博客
但是我會嘗試通過讓消息處理數據上下文切換和視圖模型更新(而不是創建依賴項屬性)來減少程序中的耦合。
例如,您可以擁有一個所有視圖模型都繼承的baseviewmodel類,並使用一個多態的通用“視圖模型”屬性,該屬性在主視圖模型中的類型為baseviewmodel。 收到從視圖模型#1切換到視圖模型#2的消息后,調用“更新模型”函數(已在baseviewmodel中聲明並在VM#2中覆蓋了該函數),該函數將處理更新VM#2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.