Читайте также:
|
|
После реализации всех необходимых менеджеров можно перейти непосредственно к 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: }
Дата добавления: 2015-08-13; просмотров: 40 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
ChildViewManager | | | Реализация MessageViewModel |