WPF 事件,声明式还是处理程序?

标签 wpf vb.net xaml events declarative

我是 WPF 的新手,正在寻找事件处理的最佳实践。例如,我有一个带有 3 个复选框的网格控件,我想在所有 3 个复选框的选中和取消选中事件上调用相同的过程。我可以在网格控件上以声明方式执行此操作:

<Grid Name="grdChecks" CheckBox.Checked="EvaluateMe" CheckBox.Unchecked="EvaluateMe" >

或者我可以在页面加载时完成

    Dim ck As System.Windows.Controls.CheckBox
    For Each child In Me.grdChecks.Children
        If child.GetType.Name = "CheckBox" Then
            ck = DirectCast(child, System.Windows.Controls.CheckBox)
            AddHandler ck.Checked, AddressOf Me.EvaluateMe
            AddHandler ck.Unchecked, AddressOf Me.EvaluateMe
        End If
    Next

这两种方法是否被认为是最佳实践或是否有其他考虑因素?

最佳答案

Is either method considered best practice or are there other considerations?

一般来说,我更愿意将事件处理程序声明保留在 XAML 中,因为这确实使它更容易理解(不需要检查页面加载中的所有子项)。此外,如果您将 CheckBox 添加到 不应 订阅的 Window/Control/etc,您的 Page_Load 代码会导致问题。

话虽这么说,但许多人不会将其中任何一种视为“最佳实践”,因为在 WPF 中通常不鼓励代码隐藏。移动复选框以在 ViewModel 中使用绑定(bind)属性通常被认为是最佳实践。

关于WPF 事件,声明式还是处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17620938/

相关文章:

WPF 菜单选项卡导航

c# - 带有网络服务的 MVVM

mysql - 消除 ListView 中的日期时间

.net - 是否可以/建议使用默认(空白)可等待任务?

c# - 从 ComboBox 的模板设置 ComboBoxItem 的样式

wpf - 区分 TouchUp 和 TouchLeave 以及 TouchDown 和 TouchEnter 的策略?

c# - 这是MVVM不好的做法吗?

c# - 是否可以删除您的类(class)未添加的 VB.NET EventHandler?

c# - silverlight xaml 到 C#

wpf - 我可以向样式添加资源或 ResourceDictionary 吗?