2013-06-28 3 views
0

В настоящее время у меня есть один вид с 3 довольно упрощенными видами. Ради этой дискуссии мы остановимся на двух из трех моделей взглядов.Как связать метод на ViewModel с данными из View

View - это пользовательский элемент управления пользователями. Он содержит DataGrid с привязкой ItemsSource к UserListViewModel. Эта модель просмотра просто отображает информацию пользователя в сетке данных.

В представлении «Управление пользователями» также содержатся некоторые другие элементы управления, такие как кнопки для добавления новых пользователей и удаления пользователей. Эти кнопки в настоящее время связаны со второй моделью просмотра, называемой UserManagementViewModel. Например, кнопка «Удалить» успешно вызовет метод RemoveUser в UserManagementViewModel.

Мой вопрос: через XAML (поскольку я ненавижу код), как я могу передать свойство SelectedItem DataGrid (привязанное к UserListViewModel) в вызов метода RemoveUser в UserManagementViewModel? Я понимаю, что в шаблоне проектирования MVVM моя модель представления не может смотреть в представление, чтобы получить необходимую информацию, поэтому должен быть способ посредством привязки для передачи этой информации в этот метод.

Примеры кода XAML (или ссылки, которые показывают, как) для выполнения аналогичной функциональности были бы оценены. Спасибо за любую помощь!

ответ

0

вы можете просто использовать CommandParameter

<Button Command="{Binding RemoveCommand} CommandParameter="{Binding Elementname=gridUser, Path=SelectedItem}" /> 

или ваши UserManagementViewModel имеют доступ к UserListViewModel, то вам нужна команда без CommandParameter и просто использовать SelectedUser свойство экземпляра UserListViewModel

public void ExecuteRemove() 
{ 
    var userToRemove = this._myUserListViewModelinstance.SelectedUser; 
    ... 
} 
+0

Наличие двух видов моделей «знает» друг о друге нарушает MVVM, образец, ты GH. Я думаю, что использование параметра команды - именно то, что я ищу. Благодаря! – Jason

+1

@ Джейсон Две модели взглядов, зная друг о друге, не * ломают MVVM как таковой. Идея MVVM заключается в том, что модели просмотра не знают, как они будут представлены. Но они все еще узнают, что будет. – Crono

0

Я считаю, что то, что вы ищете, управляет целевым объектом команды, привязанным к выбранному элементу datagrid, где можно маршрутизировать такую ​​информацию из datagrid; скажем, когда нажата кнопка.

См Commanding Overview на MSDN