gpt4 book ai didi

wpf - 在 MVVM 中处理点击事件的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 10:30:31 25 4
gpt4 key购买 nike

在 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 上的更改;对比:访问其他控件?

现在我使用这两种解决方案。按钮中的 RellayCommand(带有用于 ui 更新的事件)和 TreeView 的附加行为,以在用户单击时取消选择 TreeView 项。

最佳答案

对我来说,这个问题没有简单的答案。
这就是我的看法:

  • 如果您在 VM 上定义了状态更改,请公开一个 RelayCommand,然后可以将其绑定(bind)到触发它的东西。在 99.9% 的情况下,这是一个按钮/菜单项。可以轻松使用的东西。剩下的情况-> 可能需要一些解决方法,例如从 View 中调用方法。
    因此,如果您确实针对 VM,则应该使用 RelayCommand。
  • 另一方面,焦点更改是与 View 相关的功能。恕我直言,这与 WM 无关。这对我来说意味着它应该在 View 中实现。所以对我来说,我什至会选择一个直接的事件处理程序来完成这项工作。

  • h,
    马丁

    关于wpf - 在 MVVM 中处理点击事件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5636037/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com