Как лучше всего обрабатывать клик-события в MVVM? Есть ли лучший способ?
Я нашел два решения:
с командой relay:
RelayCommand buttonAddCategory_Click;
public ICommand ButtonAddCategory_Click
{
get
{
return buttonAddCategory_Click ?? (buttonAddCategory_Click = new RelayCommand(param => this.AddCategory(),
param => true));
}
}
pro:?; И наоборот: нужен обходной путь с событиями, если бы я изменил элементы пользовательского интерфейса , такие как фокус
с прикрепленным поведением:
public static bool GetIsResetMouseLeftButtonDown(TreeView treeView)
{
return (bool)treeView.GetValue(IsResetMouseLeftButtonDownProperty);
}
public static void SetIsResetMouseLeftButtonDown(TreeView treeViewItem, bool value)
{
treeViewItem.SetValue(IsResetMouseLeftButtonDownProperty, value);
}
public static readonly DependencyProperty IsResetMouseLeftButtonDownProperty =
DependencyProperty.RegisterAttached("PreviewMouseLeftButtonDown", typeof(bool), typeof(TreeViewBehavior),
new UIPropertyMetadata(false, OnIsMouseLeftButtonDownChanged));
pro: у вас есть RoutedEventArgs для изменений в пользовательском интерфейсе; против: доступ к другим элементам управления?
Сейчас я использую оба решения. Команда RellayCommand в кнопках (с событиями для обновлений пользовательского интерфейса) и прикрепленное поведение для древовидной структуры для отмены выбора древовидного элемента, если пользователь щелкает.