我想从我的视图模型中删除视图的创建
我写了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();新视图模型已创建。并且显示的视图具有不带参数的视图模型(默认构造函数)。
答案 0 :(得分:1)
而不是在xaml中初始化DataContext
<UserControl.DataContext>
<local:PolaPrzewoznikowViewModel />
</UserControl.DataContext>
我建议使用DesignInstance
:
<UserControl d:DataContext="{d:DesignInstance Type=local:PolaPrzewoznikowViewModel,
IsDesignTimeCreatable=True}" ...>
它将在设计时为IntelliSense和设计人员提供足够的信息,但是在运行时不会创建新的实例(只有来自WindowService的DataContext)
答案 1 :(得分:0)
为什么要设置窗口的内容和datacontext?
关于智能感知,你应该像ASh所建议的那样,数据上下文本质上可供所有视图后代使用。
如果您不想自己实施窗口服务,可以随时使用我的框架https://github.com/FantasticFiasco/mvvm-dialogs。