【问题标题】:WPF Events, declarative or handler?WPF 事件、声明性或处理程序?
【发布时间】:2023-03-26 22:08:02
【问题描述】:

我是 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

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

【问题讨论】:

    标签: wpf vb.net xaml events declarative


    【解决方案1】:

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

    【讨论】:

    • 我编写了我的第一个 WPF 应用程序,大部分事情都是在代码隐藏中完成的。那是一个巨大的错误。我们现在正在使用 MVVM(使用 MVVM 框架让事情变得更容易),现在我们已经做了一段时间了,我们甚至不需要考虑它。像大多数事情一样,开始很困难,但最终你会达到巡航速度。
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢!我看过一些对 ViewModels 的引用,但没有深入研究它们。我会这样做的。
    • 感谢所有回复的人。关于“直接” WPF vs MVVM,我认为这是一个适合工作的工具的问题。如果您面向多个平台,或者您正在编写一个其他人将用来开发应用程序的框架,我可以认为 MVVM 很有用。如果您只针对一个平台,是否值得花时间编写所有管道 - 在我的情况下,我从 Windows 应用程序开始。目前我正在采用处理 UI 事件的方法,例如在代码中启用/禁用控件,但将业务逻辑交给不同的类。
    【解决方案3】:

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

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

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

    【讨论】:

    • @user2336805 如果您是 WPF 新手,我建议您使用 reedcopsey.com/series/windows-forms-to-mvvm 代码在 C# 中,但概念是相同的,这是转换 WinForms 和其他事件的简单方法-基于的思维方式。
    • 谢谢,我对 C# 很熟悉,今天晚些时候会查看链接并提供反馈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多