在MVVM WPF 中開啟新視窗:介面注意事項
雖然從視圖模型建立新視窗實例違反了MVVM 原則,但這是常見的實作介面以抽象化開啟視窗的複雜性。但是,將介面與特定視窗類型(例如 ChildWindow)緊密耦合會限制靈活性。
通用介面解決方案
要解決此問題,請考慮更通用的介面design:
interface IWindowService { void OpenWindow<TWindow>(object dataContext) where TWindow : Window, new(); }
此介面允許您將視窗類型指定為通用參數,使服務能夠處理您指定的任何視窗類型
WindowService實作
WindowService 實作可以變成:
class WindowService : IWindowService { public void OpenWindow<TWindow>(object dataContext) where TWindow : Window, new() { var window = new TWindow(); window.DataContext = dataContext; window.Show(); } }
查看模型用法
在您的視圖模型中,您可以使用該服務開啟新視窗:需要:
public void OpenChildWindowCommandExecute() { _windowService.OpenWindow<ChildWindow>(this); }
結論
這種通用介面方法允許您從視圖模型建立和開啟新窗口,而不會違反MVVM 原則。它透過允許使用任何視窗類型來提供靈活性,促進程式碼重用和可維護性。
以上是如何在WPF的MVVM架構中開啟新的視窗而不違反其原則?的詳細內容。更多資訊請關注PHP中文網其他相關文章!