子View Model調用主ViewModel中的函數
在涉及多個具有層級關係的View Model的場景中,可能需要從子視圖模型中呼叫主視圖模型中的函數。本文正是解決了這個需求,提供了一個利用委託對象的解決方案。
考慮所描述的場景。主視窗視圖模型控制子視圖中顯示的內容。任務是透過從子視圖模型呼叫主視窗視圖模型中的函數來手動更新顯示。
使用委託對象
採用的委託方法解決方案和參考文章中允許在任何親子場景下進行溝通。可以從子視圖模型到父視圖模型、從視窗程式碼隱藏到子視窗程式碼隱藏、甚至資料關係之間進行存取。
實作
在父視圖中定義委託模型:
public delegate void ReadyForUpdate(); public ReadyForUpdate OnReadyForUpdate { get; set; }
在子視圖模型中,將處理程序附加到委託:
public void ReadyForUpdateHandler() { // Call the desired method in the parent view model }
在父在視圖模型中,呼叫此方法時適當的:
public void ChildViewModel_OnReadyForUpdate() { // Call your method here UpdateDisplay(); }
替代方法
在某些情況下,較簡單的方法可能就足夠了。從子視圖到父視圖模型的直接綁定允許直接存取父視圖模型中的 ICommand 屬性:
<!-- In a child view --> <Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />
此方法假設父視圖模型實例設定為主視窗的 DataContext。
以上是子視圖模型如何呼叫父視圖模型中的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!