在Catel中分离MVVM视图

时间:2017-01-25 10:22:40

标签: wpf catel

我有一个带有菜单的Catel.Window作为MainWindow,主要内容是:

 <ContentControl Content="{Binding ActualVM, Converter={catel:ViewModelToViewConverter}}" />

在MainWindowViewModel中:

public ViewModelBase ActualVM { get; set; }

MainWindowViewModel在菜单命令的OnExecute方法中设置ActualVM。它工作正常。我希望能够将实际视图分离到新窗口。在一个视图后面的代码中,我将以下内容用于按钮的单击:

    protected void DetachClick(object obj, RoutedEventArgs e)
    {
        ContentPresenter vp = this.GetVisualParent() as ContentPresenter;
        if (vp != null)
        {
            vp.Content = null;
            var dw = new DetachWindow();
            dw.Content = this;
            dw.Show();
        }
    }

DetachWindow是一个&#34;空&#34; Catel.Window用&#34;空&#34;视图模型。 它也工作正常,view和viewmodell在分离的窗口中运行,但是如果我点击其中一个MainWindows的菜单项,MainWindowViewModel会设置ActualVM,但是MainWindows不会像之前那样显示视图。分离

1 个答案:

答案 0 :(得分:1)

原因是您在使用此代码时正在终止绑定:

vp.Content = null;

您应该将VM上的值设置为null,以便正确更新绑定,而不是使用新值替换绑定。

您可以尝试的另一个选择是使用SetCurrentValue代替.Content = null