3

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

<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

两种方法都被认为是最佳实践还是有其他考虑?

4

3 回答 3

0

感谢大家的回应。关于“直接” WPF vs MVVM,我认为这是一个适合工作的工具的问题。如果您面向多个平台,或者您正在编写一个其他人将用来开发应用程序的框架,我可以认为 MVVM 很有用。如果您只针对一个平台,是否值得花时间编写所有管道 - 在我的情况下,我从 Windows 应用程序开始。现在我正在采用处理 UI 事件的方法,例如启用/禁用代码中的控件,但将业务逻辑交给不同的类

于 2013-07-17T16:56:32.237 回答
0

两种方法都被认为是最佳实践还是有其他考虑?

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

话虽如此,许多人不会将其中任何一个视为“最佳实践”,因为 WPF 中通常不鼓励使用背后的代码。移动复选框以使用 ViewModel 中的绑定属性通常被认为是最佳实践。

于 2013-07-12T17:48:12.107 回答
0

如果您的事件在 UI / UI 的功能上运行,您可以在 XAML 中声明事件处理程序。

如果您的事件处理程序应该管理数据逻辑和 UI 之外的其他内容,并且您正在使用 MVVM 结构,则应该使用命令将事件绑定到视图的相应视图模型中的命令 检查 EventToCommand

我不认为在 XAML 的代码中声明事件处理程序是一种好的做法,因为它降低了 xaml 应该提供的可读性。

于 2013-07-12T19:57:49.763 回答