Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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
C# 将所有视图模型存储在CoreViewModel中以提供彼此之间的通信是一种好方法吗?_C#_Wpf_Mvvm - Fatal编程技术网

C# 将所有视图模型存储在CoreViewModel中以提供彼此之间的通信是一种好方法吗?

C# 将所有视图模型存储在CoreViewModel中以提供彼此之间的通信是一种好方法吗?,c#,wpf,mvvm,C#,Wpf,Mvvm,将所有视图模型存储在CoreViewModel中以提供彼此之间的通信是一种好方法吗?或者更好地使用MVVM轻型框架或类似的东西?(我希望没有参数构造函数) Ed Plunkett建议了一种我使用的方法,但我将尝试详细说明 如果我有一个应用程序,它有几个我想要使用的子控件(例如选项卡控件中的每个选项卡页一个控件),那么MainWindow视图将绑定到XAML中主视图的视图模型: <Window.DataContext> <MainWindowViewModel/>

将所有视图模型存储在CoreViewModel中以提供彼此之间的通信是一种好方法吗?或者更好地使用MVVM轻型框架或类似的东西?(我希望没有参数构造函数)


Ed Plunkett建议了一种我使用的方法,但我将尝试详细说明

如果我有一个应用程序,它有几个我想要使用的子控件(例如选项卡控件中的每个选项卡页一个控件),那么MainWindow视图将绑定到XAML中主视图的视图模型:

<Window.DataContext>
    <MainWindowViewModel/>
</Window.DataContext>

其中_mediator是我用来在视图模型之间传递消息的对象。

您应该有一个父/子视图模型的“树”。“定位器”是一种反模式。为什么需要无参数构造函数?嗨,我想要无参数构造函数,因为我在CoreViewModel的foreach(openView中的ViewBase openView)中有这个方法,如果(openView.GetType().Equals(view)){currentView=openView;currentView.Reset();return;}currentView=Activator.CreateInstance(视图)作为ViewBase;'这很难理解。代码真的需要加入这个问题。
ViewBase
是您的viewmodel库吗?接口是实现的,而不是继承的,按照惯例,接口名称应以
I
开头。如果您的viewmodel有一个视图集合(如果它甚至知道“视图”这样的东西甚至存在),那么您已经陷入了困境。那是个非常糟糕的主意。你为什么这么做?哦,对不起,这不是接口,这是一个抽象类。
<Window.DataContext>
    <MainWindowViewModel/>
</Window.DataContext>
<Control DataContext="{Binding ExampleControlViewModel}"/>
(new ExampleWindow() { DataContext = new ExampleWindowViewModel(_mediator) }).ShowDialog();