2017-06-19 102 views
0

我已经将我的ViewModels的ObservableCollection的DocumentsSource绑定到了我的ViewModels的ObservableCollection,后面跟着文章AvalonDock 2.0 with MVVM带有MVVM的AvalonDock,文档关闭不会删除DocumentsSource中的流程

将ViewModel添加到我的集合可以正确地将它添加到一个新的选项卡中,但是如果我从UI中关闭了选项卡,我期望将它从集合中删除,但事实并非如此:集合保持其以前的计数的虚拟机,与打开的选项卡不同步。

当关闭标签页时,如何将VM从集合中删除?这篇文章只是将一个IsClosed绑定属性添加到ViewModel,但我会发现更多的逻辑从集合中删除它。

+1

[WPF的可能的复制 - AvalonDock - 关闭文档](https://stackoverflow.com/questions/18359818/wpf-avalondock-closing-document) –

+0

@Massimiliano不是真的重复,因为提到的问题是关于崩溃,但它使我转到了DocumentClosed委托解决方案。非常感谢! – CharlesB

+0

不客气。 –

回答

0

DocumentsSource收集是不是真的双向约束,我只好到DockingManager.DocumentClosed订阅委托,从集合中删除视图模型:

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); 
}