在 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中文网其他相关文章!