【发布时间】:2013-11-18 12:16:56
【问题描述】:
我有一个显示自定义组合框的 wpf 应用程序。 ComboBox 的内部文本框订阅 TextChanged 事件处理程序。 此外,ComboBox 附加到文本过滤行为。它还订阅了 textChanged 事件处理程序。
现在的场景是:
- 应用 xaml 已解析并创建静态资源(样式):--> 内部 TextBox 是 TextChanged 的第一个订阅者。
- 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