带有 MVVM 的 AvalonDock,文档关闭不会删除 DocumentsSource 中的项目
AvalonDock with MVVM, document close doesn't remove i tem in the DocumentsSource
我已将 AvalonDock 的 DockingManager
的 DocumentsSource
绑定到我的 ViewModels 的 ObservableCollection,遵循文章 AvalonDock 2.0 with MVVM。
将 ViewModel 添加到我的 collection 打开时正确地将其添加到新选项卡中,但如果我从 [=25= 关闭选项卡,我预计它会从 collection 中删除],事实并非如此:collection 保留其之前的 VM 计数,与打开的选项卡不同步。
如何在选项卡关闭时从 collection 中删除虚拟机?这篇文章只是将 IsClosed
绑定 属性 添加到 ViewModel,但我发现将其从 collection.
中删除更合乎逻辑
DocumentsSource
集合并不是真正的双向绑定,我必须将 DockingManager.DocumentClosed
订阅到一个从集合中删除 ViewModel 的委托:
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 );
}
我已将 AvalonDock 的 DockingManager
的 DocumentsSource
绑定到我的 ViewModels 的 ObservableCollection,遵循文章 AvalonDock 2.0 with MVVM。
将 ViewModel 添加到我的 collection 打开时正确地将其添加到新选项卡中,但如果我从 [=25= 关闭选项卡,我预计它会从 collection 中删除],事实并非如此:collection 保留其之前的 VM 计数,与打开的选项卡不同步。
如何在选项卡关闭时从 collection 中删除虚拟机?这篇文章只是将 IsClosed
绑定 属性 添加到 ViewModel,但我发现将其从 collection.
DocumentsSource
集合并不是真正的双向绑定,我必须将 DockingManager.DocumentClosed
订阅到一个从集合中删除 ViewModel 的委托:
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 );
}