【问题标题】:c# event subscription: ordering subscribersc#事件订阅:订购订阅者
【发布时间】:2013-11-18 12:16:56
【问题描述】:

我有一个显示自定义组合框的 wpf 应用程序。 ComboBox 的内部文本框订阅 TextChanged 事件处理程序。 此外,ComboBox 附加到文本过滤行为。它还订阅了 textChanged 事件处理程序。

现在的场景是:

  1. 应用 xaml 已解析并创建静态资源(样式):--> 内部 TextBox 是 TextChanged 的​​第一个订阅者。
  2. ComboBox xaml 被解析:行为附加 --> 它成为 TextChanged 的​​第二个订阅者

现在您猜对了:我喜欢成为第一个订阅者的行为,因为它会进行过滤,并且组合框会对过滤结果进行操作。

事件订阅放在这里: 1) 样式(作为静态资源)

<Style x:Key="MyComboBoxStyle" TargetType="ComboBox">
 ...
    <controls:TextBox x:Name="PART_EditableTextBox"
     ...
        TextChanged="PART_EditableTextBox_TextChanged"/>
</Style>

2) 行为附加到运行时组合框对象:

<myctrl:MyComboBox>
 ...
    <behaviors:FilterBehavior.TextBox="{Binding ElementName=PART_EditableTextBox}">
</myctrl:MyComboBox>

无选项:混合行为/组合框代码,因为该行为用于过滤其他文本输入控件。

我可以强制订阅者成为调用列表的第一个/最后一个吗?

【问题讨论】:

  • 不要依赖订阅顺序或委托调用顺序。 这是一个实现细节可以随时更改。

标签: c# wpf event-handling


【解决方案1】:

由于我了解到调用列表主要按订阅顺序分派,但不能保证,我现在使用 KeyUp 处理程序而不是 OnTextChanged。感谢 Sriram 的提示!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多