我正在為 Windows 開發 wpf/xaml 應用程式。我想使用材料設計框架,并且我的應用程式基于示例應用程式中的代碼松散地基于此處:http : //materialdesigninxaml.net/我的 C#/xaml 知識還可以,但非常生疏。
在此實作中,有一個鏈接到 MainWindowViewModel 的 MainWindow.xaml 視圖,其中 MainWindowViewModel 處理來自模型和表示邏輯的資料轉換。
我的問題是關于用于在 MainWindow.xaml 中查看的“頁面”的最佳設計理念 - 我有一個應用程式可以在其中導航“頁面”。所以主視窗在 a 中有一個潛在頁面的存盤ObservableCollection并顯示導航按鈕。單擊按鈕可轉到 中的下一頁ObservableCollection。
我的問題是關于 pageViewModel 如何與 MainWindowViewModel 互動。例如,用戶可能單擊 pageView 上的按鈕使命令移動到另一個頁面 - 要使用此框架執行此操作,需要在 MainWindowViewModel 上操作 ICommand。
到目前為止我所做的是讓 MainWindowViewModel 創建其他 pageViewModels。在實體化時,pageViewModels 保存對 MainWindowViewModel 的參考,可以在需要時執行 MainWindowViewModel 上的代碼。這似乎有效,但我不禁想到會有更優化的解決方案。
我一直在研究關于 SO 的類似問題 - 我需要研究IEventAggregator嗎?
uj5u.com熱心網友回復:
一種可能的解決方案是使用像caliburn micro這樣的 UI 框架。該框架會自動將一個 View 與對應的 ViewModel 連接起來。還有一種所謂的導體。導體允許在主頁面中使用多個頁面以及它自己的視圖和視圖模型。它還提供激活和停用行為等等。可能會有所幫助。
uj5u.com熱心網友回復:
到目前為止我所做的是讓 MainWindowViewModel 創建其他 pageViewModels。在實體化時,pageViewModels 保存對 MainWindowViewModel 的參考,可以在需要時執行 MainWindowViewModel 上的代碼。
這是一種方法。它的問題在于它在視圖模型類之間創建了緊密耦合。
一種更好且常見的方法是使用事件聚合器或信使在視圖模型之間進行通信。這消除了緊密耦合,因為“事件”或“訊息”的訂閱者只觀察事件聚合器而不是發布者,并且發布者只知道事件聚合器而不知道訂閱者。
有關該概念的更多資訊,請參閱此博客文章。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/381192.html
