wpf - AvalonDock 与 MVVM,文档关闭不会删除 DocumentsSource 中的项目

标签 wpf mvvm avalondock

我已将 AvalonDock 的 DockingManagerDocumentsSource 绑定(bind)到我的 ViewModel 的 ObservableCollection,遵循文章 AvalonDock 2.0 with MVVM .

将 ViewModel 添加到我的集合中会正确打开,将其添加到新选项卡中,但是虽然我预计如果我从 UI 中关闭选项卡,它会从集合中删除,但事实并非如此:集合保留了之前的计数虚拟机与打开的选项卡不同步。

当选项卡关闭时,如何将虚拟机从集合中删除?本文只是向 ViewModel 添加了一个 IsClosed 绑定(bind)属性,但我发现从集合中删除它更符合逻辑。

最佳答案

DocumentsSource 集合并不是真正以双向方式绑定(bind)的,我必须将 DockingManager.DocumentClosed 订阅到从集合中删除 ViewModel 的委托(delegate):

private void DocumentClosed(object sender, DocumentClosedEventArgs e)
{
    // Get the VM associated with the closed document
    var documentVM = (ViewModel) e.Document.Content;
    var mainVM = (MainViewModel) DataContext;

    // Remove it from the tabs
    mainVM.Tabs.Remove(documentVM );
}

关于wpf - AvalonDock 与 MVVM,文档关闭不会删除 DocumentsSource 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44632865/

相关文章:

wpf - 将 View 模型的属性绑定(bind)到另一个 View 模型的属性

C# - 如何将名称为日期的列添加到数据表中

WPF mvvm 向导

c# - AvalonDock DocumentContent 未被垃圾收集

c# - 在 Avalon Dock 中,如何以编程方式隐藏 LayoutDocumentPane 项目并恢复它们

wpf - AvalonDock 现在失去了 Alt Key 装饰

wpf - 锁定调度员

c# - 如何进行 XAML 布局 - 堆栈面板中的居中项目

c# - 使用按钮使用户控件在使用 MVVM 模式的 WPF 中可见

mvvm - 从用户交互和服务事件更新 View 模型的好模式是什么?