Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Понятие IChildViewModelManager

Читайте также:
  1. I. Понятие, правовая природа и значение гражданства
  2. I.Понятие
  3. II. Исключить «лишнее» понятие
  4. II. Понятие и принципы построения управленческих структур.
  5. VII. ПОНЯТИЕ О СТРЕЛЬБЕ С ЗАКРЫТОИ ОП
  6. Адвокатская палата субъекта Российской Федерации и ее органы. Понятие, порядок образования, компетенция.
  7. Аккредитив. Понятие аккредитива

Очевидно, что модели представления дочерних окон не могут работать сами по себе, и необходим механизм, отображающий их в настоящие дочерние окна целевой платформы (Silverlight или WPF).

Для этих целей необходимо ввести менеджер дочерних моделей представления: он ведет учет видимых в настоящий момент моделей представления и сообщает о них всем внешним слушателям, подписанным на изменения коллекции ViewModels:

1: /// <summary>

2: /// Interface of class managing closeable View Models of

3: /// the specified type

4: /// </summary>

5: public interface IChildViewModelManager

6:: ICloseableViewModelPresenter<IChildViewModel>

7: {

8: /// <summary>

9: /// Collection of managed View Models

10: /// </summary>

11: ReadOnlyObservableCollection<IChildViewModel>

12: ViewModels { get; }

13: }

Здесь используется понятие презентера закрываемой модели представления, который принимает к регистрации видимые модели представления:

1: /// <summary>

2: /// Interface of closeable View Model presenter

3: /// </summary>

4: [InheritedExport]

5: public interface ICloseableViewModelPresenter<in TViewModelBase>

6: where TViewModelBase: ICloseableViewModel

7: {

8: /// <summary>

9: /// Shows <paramref name="viewModel" />

10: /// </summary>

11: void ShowViewModel(TViewModelBase viewModel);

12: }

Реализация менеджера дочерних моделей представления принимает к регистрации видимые модели представления дочерних окон и добавляет их во внутреннюю коллекцию. Одновременно с регистрацией происходит привязка к событию Closed модели представления, по которому она снимается с регистрации в менеджере и удаляется из коллекции:

1: /// <summary>

2: /// Manages closeable View Models of the specified type

3: /// </summary>

4: internal class ChildViewModelManager

5:: IChildViewModelManager

6: {

7: // Private fields

8: private readonly ObservableCollection<IChildViewModel>

9: _viewModelsInternal =

10: new DispatchObservableCollection<IChildViewModel>();

11: private ReadOnlyObservableCollection<IChildViewModel>

12: _viewModels;

13:

14: /// <summary>

15: /// Collection of managed View Models

16: /// </summary>

17: public ReadOnlyObservableCollection<IChildViewModel>

18: ViewModels

19: {

20: get

21: {

22: return _viewModels?? (_viewModels =

23: new ReadOnlyObservableCollection<IChildViewModel>(

24: _viewModelsInternal));

25: }

26: }

27:

28: #region ICloseableViewModelPresenter<TViewModelBase> Members

29:

30: void ICloseableViewModelPresenter<IChildViewModel>

31:.ShowViewModel(IChildViewModel viewModel)

32: {

33: ShowViewModelCore(viewModel);

34: }

35:

36: #endregion

37:

38: /// <summary>

39: /// Closes <paramref name="viewModel" />

40: /// </summary>

41: protected virtual void CloseViewModelCore

42: (IChildViewModel viewModel)

43: {

44: viewModel.Closed -= OnViewModelClosed;

45:

46: Debug.Assert(_viewModelsInternal.Contains(viewModel));

47: _viewModelsInternal.Remove(viewModel);

48: }

49:

50: /// <summary>

51: /// Shows <paramref name="viewModel" />,

52: /// adding it to collection

53: /// </summary>

54: protected virtual void ShowViewModelCore

55: (IChildViewModel viewModel)

56: {

57: Debug.Assert(!viewModel.IsClosed);

58: viewModel.Closed += OnViewModelClosed;

59:

60: Debug.Assert(!_viewModelsInternal.Contains(viewModel));

61: _viewModelsInternal.Add(viewModel);

62: }

63:

64: private void OnViewModelClosed(object sender, EventArgs e)

65: {

66: Debug.Assert(sender is IChildViewModel);

67: CloseViewModelCore((IChildViewModel)sender);

68: }

69: }


Дата добавления: 2015-08-13; просмотров: 54 | Нарушение авторских прав


Читайте в этой же книге: Синхронное использование XAML | Отсутствие метода OverrideMetadata() | Отсутствие свойства No PathSegment.IsStroked | Краткие итоги | Задача 3. | Принцип инверсии зависимостей | Формы инверсии зависимостей | IoC контейнер | Сопоставление модели представления и представления | Реализация INotifyPropertyChanged средствами аспектно-ориентированного программирования |
<== предыдущая страница | следующая страница ==>
Краткие итоги| ChildViewManager

mybiblioteka.su - 2015-2024 год. (0.007 сек.)