Wpf 关闭调用者窗口的命令的正确设计?
我有一个WPF对话框(窗口的继承者)。该对话框有一个“确定”按钮,该按钮绑定到ViewModel上的“处理”命令。(该“进程”命令是Josh Smith RelayCommand。)“确定”按钮上的CommandParameter设置为对话框窗口本身。如果处理成功,则从ViewModel的命令处理程序内部关闭对话框窗口。在我看来,这似乎违反了单一责任原则。对于可能关闭或可能不关闭调用者窗口的命令,正确的模式是什么?尽管看起来有些设计模式被破坏了,但通常的做法是ViewModel可能知道其视图,以便完成特定任务,例如关闭对话框或设置特定状态 在视图-视图模型绑定期间,可以使用对视图的引用初始化视图模型。稍后,通过执行该命令,ViewModel可以使用视图使用公共界面提供的功能Wpf 关闭调用者窗口的命令的正确设计?,wpf,design-patterns,command,Wpf,Design Patterns,Command,我有一个WPF对话框(窗口的继承者)。该对话框有一个“确定”按钮,该按钮绑定到ViewModel上的“处理”命令。(该“进程”命令是Josh Smith RelayCommand。)“确定”按钮上的CommandParameter设置为对话框窗口本身。如果处理成功,则从ViewModel的命令处理程序内部关闭对话框窗口。在我看来,这似乎违反了单一责任原则。对于可能关闭或可能不关闭调用者窗口的命令,正确的模式是什么?尽管看起来有些设计模式被破坏了,但通常的做法是ViewModel可能知道其视图,以
在您的情况下,我建议这样做(就像这样),而不是将窗口作为
CommandParameter
传递 尽管看起来有些设计模式被破坏了,但通常的做法是,ViewModel可能知道自己的视图,以便完成特定任务,例如关闭对话框或设置特定状态
在视图-视图模型绑定期间,可以使用对视图的引用初始化视图模型。稍后,通过执行该命令,ViewModel可以使用视图使用公共界面提供的功能
在您的情况下,我建议这样做(就像这样),而不是将窗口作为
CommandParameter
传递 因此Caliburn.Micro使用类命名约定来定位视图。我也不确定我是否喜欢那样。我喜欢您在施工时通过视图的想法,但这带来了一个后续问题。通常,我喜欢在视图的参考资料部分构造ViewModel类。我喜欢这样,因为我在XAML中获得了ViewModel属性的Intellisense。有没有一种好方法可以在XAML中构造这些东西,同时仍然支持ViewModel的IoC类型的初始化?因此Caliburn.Micro使用类命名约定来定位视图。我也不确定我是否喜欢那样。我喜欢您在施工时通过视图的想法,但这带来了一个后续问题。通常,我喜欢在视图的参考资料部分构造ViewModel类。我喜欢这样,因为我在XAML中获得了ViewModel属性的Intellisense。在XAML中构造这些东西,同时仍然支持ViewModel的IoC类型初始化,有没有一种好方法?