【问题标题】:WPF/MVVM windowsservice without viewmodel reset没有视图模型重置的 WPF/MVVM windowsservice
【发布时间】:2018-02-24 17:36:45
【问题描述】:

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

我写了 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 保留在视图中?

【问题讨论】:

  • 很明显,您创建了两次 ViewModel。一个在代码中,一个在

标签: wpf mvvm


【解决方案1】:

而不是在 xaml 中初始化 DataContext

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

我建议使用DesignInstance:

<UserControl d:DataContext="{d:DesignInstance Type=local:PolaPrzewoznikowViewModel, 
                             IsDesignTimeCreatable=True}" ...>

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

【讨论】:

    【解决方案2】:

    为什么要同时设置窗口的内容和数据上下文?

    关于智能感知,您应该按照 ASh 的建议进行操作,数据上下文本质上将可供所有视图后代使用。

    如果您不想自己实现窗口服务,可以随时使用我的框架https://github.com/FantasticFiasco/mvvm-dialogs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 2011-07-14
      相关资源
      最近更新 更多