Обработка событий нескольких дочерних пользовательских элементов управления в сетке другим родительским пользовательским элементом управления - PullRequest
0 голосов
/ 24 января 2011

в моем приложении WPF (шаблон MVVM) я пытаюсь обработать события от нескольких UC (назовем это дочерними) в основном UC, назовите это родительским (тип менеджера по расположению). У каждого ребенка есть событие, чтобы сообщить родителю о закрытии ребенка. Выглядит так:
ParentView
|
- ChildView
|
- ChildView
|
- и т. д.
Как и Джош Смит, я использую рабочую область viewmodel для команды close, а ParentView и ChildView наследуются от WorkspaceViewModel (который сам, конечно, наследует от ViewModelBase). Теперь проблема в том, когда я закрываю ребенка. Событие RequestClose вызывается ParentView, а не ChildView. Но событие зарегистрировано для ребенка. Как это возможно, что RequestClose в WorkspaceViewModel вызывается дочерним, а не родительским? Я должен добавить к своему описанию проблемы, что в этом случае я ломаю шаблон MVVM и добавляю свой ChildView в коде ParentView:

parentViewGrid.Children.Add(childView)

В этом случае, к сожалению, вряд ли возможно следовать шаблону MVVM. По причинам смотрите здесь: Polyline и MVVM . Я действительно не решил эту проблему. Другими словами, сомнительно, что следование шаблону MVVM в этом случае является преимуществом или недостатком в отношении производительности и сложности.
Надеюсь, вы сможете помочь мне и понять мою проблему. Заранее спасибо.
Кай

1 Ответ

0 голосов
/ 26 января 2011

Как и Джош Смит, я использую модель представления рабочей области для команды закрытия, а ParentView и ChildView наследуются от WorkspaceViewModel (который сам, конечно, наследует от ViewModelBase).

Я не думаю, что ваши представления должны наследоваться от ваших классов ViewModel.Во всяком случае, ваши представления должны иметь свойство DataContext , установленное на вашу ViewModel.

Кроме того, ИМХО, нет ничего плохого в вашем коде parentViewGrid.Children.Add(childView)

...Пока вы сохраняете код View в представлении, а не напрямую связываетесь с конкретными свойствами ViewModel из определенных ViewModels.

Наконец, я просто придирчив, но мне не нравится, когда событие называетсяRequestClose, почему бы не изменить его на стандартный Closing или хотя бы CloseRequested?

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