使用MVVM打开具有相同ViewModel的多个窗口

本文关键字:ViewModel 窗口 MVVM 使用 | 更新日期: 2023-09-27 18:22:31

此问题是指在MVVM WPF中打开新窗口的链接
我想打开一些服务的新窗口。以下是我的代码

这是我从ViewModel 调用的窗口服务

public class WindowService : IWindowService
{
    public void ShowWindow(object viewModel)
    {
        var win = new Window {Content = viewModel};
        win.Show();
    }
}

以下是我的App.xaml代码

<DataTemplate DataType="{x:Type viewModel:MainViewModel}" >
        <viewModel:ChildWindow />
</DataTemplate>

现在,这适用于所有具有不同ViewModel的窗口。但当我想打开另一个使用相同视图模型但视图不相同的窗口时,我无法在App.xaml中定义相同类型的数据模板。

如何打开多个具有相同ViewModel的新窗口?我应该为每个窗口创建不同的ViewModel吗?

使用MVVM打开具有相同ViewModel的多个窗口

我在这里展示了一种打开和关闭窗口的替代方法。

您可以将DependencyProperty(例如DataContext)添加到OpenCloseWindowBehavior,使用它传递ViewModel,并在行为代码中将窗口的DataContext连接到此ViewModel。如果你需要更多帮助,请告诉我。

<local:OpenCloseWindowBehavior WindowType="local:YellowWindow" Open="{Binding YellowOpen, Mode=TwoWay}" DataContext="{Binding SomeViewModel}" />