MVVMでクリックイベントを処理する最良の方法は何ですか? 最善の方法はありますか?
私は2つの解決策を見つけました:
リレーコマンドで:
RelayCommand buttonAddCategory_Click;
public ICommand ButtonAddCategory_Click
{
get
{
return buttonAddCategory_Click ?? (buttonAddCategory_Click = new RelayCommand(param => this.AddCategory(),
param => true));
}
}
プロ: ?; contra:フォーカスなどのUI 要素を変更する場合は、イベントに関する回避策が必要です
付属の動作で:
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));
プロ:UIの変更にはRoutedEventArgsがあります。反対: 他のコントロールへのアクセス?
現在、両方のソリューションを使用しています。Buttons の RellayCommand (UI 更新のイベントを含む) と、ユーザーがクリックした場合にツリービュー項目の選択を解除するためのツリービューの添付された動作。