我已将 AvalonDock 的 DockingManager
的 DocumentsSource
绑定(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/