不重置viewmodel的WPF/MVVM windowsservice
我想从视图模型的创建中删除 我编写了WinodwsService类来创建一个新窗口:不重置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 =
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}" ...>