【问题标题】:C#/WPF - RoutedEvent in WPF class that isn't a UIElementC#/WPF - WPF 类中不是 UIElement 的 RoutedEvent
【发布时间】:2010-03-29 09:43:13
【问题描述】:

我有一个班级需要通知发生了重要的事情。该类在 WPF 项目中,即使这个特定的类是无外观的(并且不直接或间接地从 UIElement 继承)。

通常,我只需注册一个RoutedEvent 即可获得此功能,但由于此类既没有 AddHandler 也没有 RemoveHandler,我无法让它工作。有谁知道获得RoutedEvent 行为的另一种方法?

【问题讨论】:

    标签: wpf uielement routedevent


    【解决方案1】:

    据我所知,如果你的类不是UIElement,它不能是可视化树的一部分,如果它不是可视化树的一部分,你不能抛出RoutedEvents。它们是严格意义上的 UI 概念。

    我认为推荐的方法是让您的类继承自 UIElement,或者如果这是不可能/不希望的,则为您的类创建一个从 UIElement 继承的对应物,并在视觉中使用第二个类树,你通常会放置你的原始类。

    【讨论】:

    • 为什么不使用常规的 .net 事件?在你的lookless 类中定义事件,当发生某些事情时在你的lookless 类中触发事件,并且任何其他想要被通知的类都可以简单地注册这个事件。如果适用于您的特定应用程序,您甚至可以将此事件设为静态。
    • 这取决于具体情况,但发帖人要求提供 RoutedEvents,我认为这是有原因的。在他的情况下,也许常规事件会发生......我不知道,没有足够的细节。但两者都有各自的优势。如果侦听器没有直接引用事件源,则 RoutedEvents 特别有用。例如,您有一个必须对特定事件做出反应的容器控件,但容器并不总是确切地知道其中的哪些控件可以/将抛出它。控件可以有多个级别,也可以由模板创建。
    • 定期活动!我只是在寻找一种通知其他类的方法,并不一定需要 RoutedEvent 的额外功能。在 WPF 之前我没有编写很多 C#,所以我不太确定在 RoutedEvents 之前存在什么。所以,感谢 Adel 和 Bubblewrap!
    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 2011-01-23
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2023-04-03
    相关资源
    最近更新 更多