Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪里是注册负责显示窗口的Messenger的好地方,以确保MVVM模式分离的关注点和可测试性不受侵犯?_Mvvm_Mvvm Light_Separation Of Concerns - Fatal编程技术网

哪里是注册负责显示窗口的Messenger的好地方,以确保MVVM模式分离的关注点和可测试性不受侵犯?

哪里是注册负责显示窗口的Messenger的好地方,以确保MVVM模式分离的关注点和可测试性不受侵犯?,mvvm,mvvm-light,separation-of-concerns,Mvvm,Mvvm Light,Separation Of Concerns,情景: 主窗口有一个与AboutWindow相关的菜单 关于Meny由以下命令触发: <MenuItem Header="_About" Command="{Binding OpenAbout}"/> 通知消息已在App.cs类中注册,如下所示: static App() { DispatcherHelper.Initialize(); } public App() {

情景:

主窗口有一个与AboutWindow相关的菜单

关于Meny由以下命令触发:

<MenuItem Header="_About" Command="{Binding OpenAbout}"/>
通知消息已在App.cs类中注册,如下所示:

 static App()
        {
            DispatcherHelper.Initialize();
        }

        public App()
        {
            RegisterMessenger();
        }

        public void RegisterMessenger()
        {
            Messenger.Default.Register<NotificationMessage>(this, ProcessShowAboutView);          
        }

        private void ProcessShowAboutView(NotificationMessage message)
        {
            AboutWindow view = new AboutWindow();
            view.Show();
        }
static App()
{
DispatcherHelper.Initialize();
}
公共应用程序()
{
RegisterMessenger();
}
公共作废登记员()
{
Messenger.Default.Register(这是ProcessShowAboutView);
}
私有无效进程ShowAboutView(通知消息)
{
AboutWindow视图=新的AboutWindow();
view.Show();
}
我分析了其他类似的问题:

  private RelayCommand _openAbout;
        public RelayCommand OpenAbout
        {
            get
            {
                return _openAbout ?? (_openAbout = new RelayCommand(() => Messenger.Default.Send(new NotificationMessage("ShowAboutView"))));
            }
        }

我喜欢Messenger的功能,但我不确定上述解决方案是否是一个好的解决方案。 如果有任何建议,我将不胜感激

如上所述,在App Config中注册消息。 我认为这不是一个好地方,所以我需要知道什么地方会更好。
另一个考虑的地方是定位器< /P> < P>我将登记在<代码> App.xAML.Cs<代码>中的代码> OnStudio< /Co> >方法(WPF)和单元测试的设置方法(不要忘记在拆解方法中注销所有内容)。p> 感谢您的快速响应,您认为此解决方案比ViewModelLocator的构造函数好吗?你能指出你的建议的优点吗?还有另一个方面:既然我知道如何创建窗口,那么关闭它们怎么样?是否也应该在App.xaml.cs中完成?对于这种已知的问题,有什么好的做法吗?
App
构造函数是注册消息处理程序的理想场所。