C# 关于MVVM教程的问题:关闭工作空间/可观察集合
这与上的教程有关。这是用来关闭工作区或选项卡的C# 关于MVVM教程的问题:关闭工作空间/可观察集合,c#,mvvm,C#,Mvvm,这与上的教程有关。这是用来关闭工作区或选项卡的 // workspaces declared as follows _workspaces = new ObservableCollection<WorkspaceViewModel>(); _workspaces.CollectionChanged += this.OnWorkspacesChanged; void OnWorkspacesChanged(object sender, NotifyCollectionChangedE
// workspaces declared as follows
_workspaces = new ObservableCollection<WorkspaceViewModel>();
_workspaces.CollectionChanged += this.OnWorkspacesChanged;
void OnWorkspacesChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null && e.NewItems.Count != 0)
foreach (WorkspaceViewModel workspace in e.NewItems)
workspace.RequestClose += this.OnWorkspaceRequestClose;
if (e.OldItems != null && e.OldItems.Count != 0)
foreach (WorkspaceViewModel workspace in e.OldItems)
workspace.RequestClose -= this.OnWorkspaceRequestClose;
}
//工作区声明如下
_工作空间=新的ObservableCollection();
_workspaces.CollectionChanged+=this.OnWorkspacesChanged;
void OnWorkspacesChanged(对象发送方,NotifyCollectionChangedEventArgs e)
{
如果(e.NewItems!=null&&e.NewItems.Count!=0)
foreach(e.NewItems中的WorkspaceViewModel工作空间)
workspace.RequestClose+=this.OnWorkspaceRequestClose;
如果(e.OldItems!=null&&e.OldItems.Count!=0)
foreach(e.OldItems中的WorkspaceViewModel工作空间)
workspace.RequestClose-=this.OnWorkspaceRequestClose;
}
我不明白的是
e.NewItems
和e.OldItems
将是什么。假设NewItems
将是添加到集合中的新项,我是否附加事件处理程序?但它将是单数的,因为我通常一次添加1项?那么,如果这意味着更改后仍将存在所有项目,为什么我需要重新附加事件处理程序?该方法用于处理NotifyCollectionChanged
事件-它可以用于“添加”、“移动”、“删除”、“替换”或“重置”操作。ie项目正在集合中添加或删除(等)
是变更中涉及的新项目的列表NewItems
是受替换、删除或移动操作影响的项目列表OldItems
OnWorkspaceRequestClose
”处理程序将附加到新ViewModel的“RequestClose”事件
如果添加其他ViewModel,则处理程序将附加到新的ViewModel,但集合中的现有项不会受到影响
顺便说一句,该方法的后半部分是删除正在关闭的ViewModels的OnWorkspaceRequestClose
事件处理程序(以防止内存泄漏)