Wpf 使用MVVM管理复杂的UI

Wpf 使用MVVM管理复杂的UI,wpf,mvvm,Wpf,Mvvm,我的问题实际上是关于用MVVM启动应用程序: 我的主屏幕将承载许多屏幕。我知道它们将是用户控件 但我看不到我在哪里实例化,然后当我想要的时候,当我显示它们的时候,当我隐藏它们的时候 我不清楚这个逻辑。有人能给我解释一下或者给我举个简单明了的例子吗 谢谢 John您可以使用现有的应用程序框架来帮助管理它,而不是自己来做。特别是用its解决了这个问题。我肯定还有其他的。想象一下,您有一个绑定到主屏幕的MainViewModel。让MainViewModel成为一个单例类,其中有一个“CurrentV

我的问题实际上是关于用MVVM启动应用程序:

我的主屏幕将承载许多屏幕。我知道它们将是用户控件

但我看不到我在哪里实例化,然后当我想要的时候,当我显示它们的时候,当我隐藏它们的时候

我不清楚这个逻辑。有人能给我解释一下或者给我举个简单明了的例子吗

谢谢
John

您可以使用现有的应用程序框架来帮助管理它,而不是自己来做。特别是用its解决了这个问题。我肯定还有其他的。

想象一下,您有一个绑定到主屏幕的MainViewModel。让MainViewModel成为一个单例类,其中有一个“CurrentViewModel”属性(INotifypropertyChanged实现)。现在,您可以实例化任何特定的ViewModel(基于命令/单击),并按如下所示分配实例

MainViewModel.Instance.CurrentViewModel=new-SomeViewModel()

现在,您的主屏幕XAML将具有

  <Window> 
     <ContentControl Content="{Binding CurrentViewModel,Source={x:static vm:MainViewModel.Instance}}"
 </Window>


良好的开端。为什么我需要DataTemplate?因为这是WPF决定ViewModel类需要实例化哪个用户控件的方式。在您的应用程序中将有许多DataTemplate声明。主要是在资源文件(或App.xaml)中,这让我感到困惑,因为我认为绑定到视图是不够的。你知道我可以看一个完整(简单)的示例吗?我明白你的意思,正如你所说的绑定到视图也可以工作,但是我们不能说它是纯MVVM。因为你“再次解耦”?通过DataTemplate添加另一个间接寻址有什么好处?
<DataTemplate DataType="{x:Type vm:SomeViewModel}">
     <view:SomeView/>
</DataTemplate>