【发布时间】:2011-04-12 13:33:35
【问题描述】:
在 MVVM 中处理点击事件的最佳方式是什么?有没有最好的办法?
我找到了两种解决方案:
使用中继命令:
RelayCommand buttonAddCategory_Click;
public ICommand ButtonAddCategory_Click
{
get
{
return buttonAddCategory_Click ?? (buttonAddCategory_Click = new RelayCommand(param => this.AddCategory(),
param => true));
}
}
专业人士:?;相反:如果我要更改 ui 元素 like focus
,则需要解决事件附加行为:
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));
专业人士:您有 RoutedEventArgs 用于在 ui 上进行更改; contra:访问其他控件?
现在我同时使用这两种解决方案。按钮中的 RellayCommand(带有用于 ui 更新的事件)和树视图的附加行为,以在用户单击时取消选择树视图项。
【问题讨论】:
标签: wpf mvvm relaycommand attachedbehaviors