WPF: вызов метода в View из viewModel - PullRequest
8 голосов
/ 18 июня 2011

Я использую AvalonDock в приложении WPF, и мне нужно сохранить макет AvalonDock, который пользователь установил (перемещение, закрепление, отсоединение панелей).

Функция для этого находится на самом элементе управления (SaveLayout, RestoreLayout).

Как правильно это сделать?

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

Но как бы я подошел к этому, если бы это делали некоторые низкоуровневые представление и модель представления? Если бы я использовал этот метод, мне все равно пришлось бы создавать Команду на уровне приложения и отправлять ее через viewModels туда, где ее необходимо привязать? Внутри него я должен искать пользовательский элемент управления, который является представлением, а затем элемент управления avalonDock внутри него и использовать его на уровне приложения, который подвержен ошибкам. Каким-то образом это кажется грязным ...

Спасибо!

Ответы [ 2 ]

3 голосов
/ 18 июня 2011

Вы можете ввести интерфейс IView , чтобы ViewModel могла вызывать метод в представлении.Таким образом, ViewModel не нужно знать о конкретном классе View, и он все еще может быть проверен модулем.

Как это можно сделать, показано в примерах приложений WPF Application Framework(WAF) .

1 голос
/ 18 июня 2011

Вы можете использовать развязанный обмен сообщениями для связи между моделями представлений

http://www.bradcunningham.net/2009/11/decoupled-viewmodel-messaging-part-1.html

...