簡體   English   中英

從父級設置子視圖模型的屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM