在 Catel 中分离 MVVM 视图

Detach MVVM View in Catel

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

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

在 MainWindowViewModel 中:

public ViewModelBase ActualVM { get; set; }

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

    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 是一个带有 "empty" ViewModel 的 "empty" Catel.Window。 它也工作正常,视图和视图模型在分离 window 中运行,但如果我单击 MainWindows 的菜单项之一,MainWindowViewModel 设置 ActualVM,但 MainWindows 不会像之前那样显示视图分离。

这是因为您在使用此代码时取消了绑定:

vp.Content = null;

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

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