Вопрос о MVVM Tutorial: закрытие рабочих областей / наблюдаемая коллекция - PullRequest
0 голосов
/ 26 сентября 2010

это относится к учебнику по msdn .Это то, что используется для закрытия рабочих областей или вкладок.

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

Чего я не понимаю, так это того, что будет e.NewItems и e.OldItems.Предполагая, что NewItems будет новым элементом, добавленным в коллекцию, я прикрепляю обработчик событий?Но тогда это будет единственное число, так как я обычно добавляю по 1 предмету за раз?затем, если это означает, что все элементы, которые все еще будут существовать после изменения, зачем мне нужно повторно присоединять обработчики событий?

1 Ответ

0 голосов
/ 26 сентября 2010

Этот метод предназначен для обработки события NotifyCollectionChanged - это может быть действие «Добавить», «Переместить», «Удалить», «Заменить» или «Сбросить».т.е. элементы добавляются или удаляются (и т. д.) в / из коллекции.

  • NewItems - это список новых элементов, включенных в изменение.
  • OldItems - это список элементов, на которые влияет действие «Заменить», «Удалить» или «Переместить».

Другими словами, когда вы добавляете ViewModel в коллекцию, 'OnWorkspaceRequestClose'обработчик присоединяется к событию RequestClose только этого нового ViewModel.

Если вы добавляете еще один ViewModel, обработчик присоединяется к новому (-ям), но к существующим элементам в коллекциине будет затронут ...

Кстати, вторая половина метода удаляет обработчики событий OnWorkspaceRequestClose для тех закрываемых моделей ViewModel (чтобы предотвратить утечки памяти)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...