Работает следующий пример RoutedCommand.Как перенести мой обработчик RoutedCommand из View-codebehind в ViewModel?
Однако обращение к кнопке, которая выполняет команду , находится в кодировке вида. То, как я понимаю MVVM, это должно быть в ViewModel.
Однако, когда я перемещаю метод в ViewModel (и меняю его на общедоступный), я получаю сообщение об ошибке «ManagedCustomersView не содержит определения OnSave». Даже если я изменил второй параметр RoutedCommand на typeof (ManageCustomersViewModel), я получаю ту же ошибку.
Как переместить обработчик команд из View-codebehind в ViewModel?
ManageCustomersView.xaml:
<UserControl.CommandBindings>
<CommandBinding Command="local:Commands.SaveCustomer" Executed="OnSave"/>
</UserControl.CommandBindings>
...
<Button Style="{StaticResource formButton}"
Content="Save"
Command="local:Commands.SaveCustomer"
CommandParameter="{Binding Id}"/>
ManageCustomersView.xaml.cs:
private void OnSave(object sender
, System.Windows.Input.ExecutedRoutedEventArgs e)
{
int customerId = ((int)e.Parameter);
MessageBox.Show(String.Format
("You clicked the save button for customer with id {0}.", customerId));
}
Commands.cs:
using System.Windows.Input;
using TestDynamicForm123.View;
namespace TestDynamicForm123
{
public class Commands
{
public static RoutedCommand SaveCustomer =
new RoutedCommand("SaveCustomer", typeof(ManageCustomersView));
}
}
Хмм, я добавил эти два бита кода, и теперь щелчок по моей кнопке ничего не делает. Я могу вынуть UserControl.CommandBindings или оставить его, но это не влияет. Ничего в выводе. Что еще мне нужно изменить? –
Взгляните на RoutedCommand, который делает его намного проще. Вы можете вернуть новый RoutedCommand (p => MessageBox.Show («Сохранение.»)) Изнутри вашей модели представления. –
Я думаю, что предыдущий комментатор означал RelayCommand. –