不重置viewmodel的WPF/MVVM windowsservice

不重置viewmodel的WPF/MVVM windowsservice,wpf,mvvm,Wpf,Mvvm,我想从视图模型的创建中删除 我编写了WinodwsService类来创建一个新窗口: public class WindowService : IWindowService { public void ShowWindow(object viewModel) { //var win = new DXWindowCloasable(viewModel); var win = new DXWindow(); win.Content =

我想从视图模型的创建中删除

我编写了WinodwsService类来创建一个新窗口:

public class WindowService : IWindowService
{
    public void ShowWindow(object viewModel)
    {
        //var win = new DXWindowCloasable(viewModel);
        var win = new DXWindow();
        win.Content = viewModel;
        win.DataContext = viewModel;
        win.ShowDialog();

    }
}
在视图模型中,我调用方法:

var vm = new PolaPrzewoznikowViewModel(konf);
IWindowService wnf = new WindowService(); // this is only for test
wnf.ShowWindow(vm);
在UserControl中,我定义了视图模型类型:

<UserControl.DataContext>
    <local:PolaPrzewoznikowViewModel />
</UserControl.DataContext>

当我有这个功能时,我可以在命令上向下钻取(CTRL+B),并在投影视图时使用完整的代码-这非常有用

但是。。。当我使用 win.ShowDialog();将创建新的视图模型。并且显示的视图具有不带参数的视图模型(默认构造函数)


如何使用窗口服务并在视图中保留定义的UserControl.DataContext?而不是在xaml中初始化DataContext

<UserControl.DataContext>
    <local:PolaPrzewoznikowViewModel />
</UserControl.DataContext>

它将在设计时为IntelliSense和designer提供足够的信息,但在运行时不会创建新实例(只有来自WindowsService的DataContext)

为什么要同时设置窗口的内容和DataContext

关于intellisense,您应该按照ASh的建议执行,数据上下文的性质将对所有视图子体可用


如果您不想自己实现窗口服务,您可以始终使用my framework。

很明显,您创建了两次ViewModel。一个在代码中,一个在代码中
<UserControl d:DataContext="{d:DesignInstance Type=local:PolaPrzewoznikowViewModel, 
                             IsDesignTimeCreatable=True}" ...>