Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
course_(Windows&Web).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.68 Mб
Скачать

Реализация ChildViewModelBase

После реализации всех необходимых менеджеров можно перейти непосредственно к ChildViewModelBase. Этот класс будет предоставлять своим наследникам базовый функционал, позволяющий им работать как моделям представления дочернего окна.

В класс также добавлены некоторые члены, которые пригодятся при его использовании:

  • Команда CloseCommand позволяет быстро привязывать элементы управления, закрывающие окно (такие, как кнопка «Отмена» или «Закрыть»);

  • Метод Show сделан виртуальным, чтобы спецификации дочерних окон могли при необходимости переопределить его и произвести необходимую инициализацию при показе модели представления.

  • Защищенный виртуальный метод OnClosing позволяет наследнику при помощи аргумента CancelEventArgs отменить закрытие окна. Это полезно, например, при необходимости отобразить диалог подтверждения закрытия, и не закрывать модель представления, если пользователь передумал.

  • При помощи защищенного виртуального метода OnClosed классы, находящиеся ниже в иерархии наследования, могут обработать событие закрытия модели представления, например, очистив выделенные при создании или в методе Show ресурсы.

1: /// <summary>

2: /// Base class for View Model supporting closing

3: /// </summary>

4: public abstract class ChildViewModelBase : IChildViewModel

5: {

6: /// <summary>

7: /// Shows whether a View Model has been closed

8: /// </summary>

9: public virtual bool IsClosed { get; private set; }

10:

11: /// <summary>

12: /// View Model's title

13: /// </summary>

14: public virtual string Title

15: {

16: get { return "Безымянный"; }

17: }

18:

19: #region Commands

20:

21: private ICommand _closeCommand;

22:

23: /// <summary>

24: /// Command closing the tab

25: /// </summary>

26: public ICommand CloseCommand

27: {

28: get

29: {

30: return _closeCommand ??

31: (_closeCommand = new ActionCommand(Close));

32: }

33: }

34:

35: #endregion

36:

37: #region Injected properties

38:

39: [Import]

40: public virtual ICloseableViewModelPresenter<IChildViewModel>

41: ViewModelPresenter { get; set; }

42:

43: #endregion

44:

45: /// <summary>

46: /// Event raised when the View Model is closed

47: /// </summary>

48: public event EventHandler Closed;

49:

50: /// <summary>

51: /// Closes View Model

52: /// </summary>

53: public void Close()

54: {

55: if (IsClosed)

56: {

57: return;

58: }

59:

60: var cancelEventArgs = new CancelEventArgs();

61: OnClosing(cancelEventArgs);

62:

63: if (cancelEventArgs.Cancel)

64: {

65: return;

66: }

67:

68: OnClosed();

69: }

70:

71: /// <summary>

72: /// Registers View Model to be shown

73: /// </summary>

74: public virtual void Show()

75: {

76: ViewModelPresenter.ShowViewModel(this);

77: }

78:

79: /// <summary>

80: /// Processes View Model closing attempt

81: /// </summary>

82: protected virtual void OnClosing(CancelEventArgs e)

83: {

84: //

85: }

86:

87: /// <summary>

88: /// Processes View Model close

89: /// </summary>

90: protected virtual void OnClosed()

91: {

92: IsClosed = true;

93:

94: if (Closed != null)

95: {

96: Closed(this, EventArgs.Empty);

97: }

98: }

99: }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]