Tom*_*Tom 5 c# wpf combobox visual-studio-2010
在WPF中,我想以编程方式在组合框中引发SelectionChanged事件.我尝试了以下代码,但它不起作用:
myComboBox.RaiseEvent(new RoutedEventArgs(ComboBox.SelectionChangedEvent,
myComboBox));
Run Code Online (Sandbox Code Playgroud)
我怎么能举起这个活动?
谢谢
虽然这里的其他答案是很好的做法,但它们实际上并没有回答您的问题。要实际回答以编程方式引发 SelectionChangedEvent 的问题,您可以执行以下操作:
RoutedEvent routed = ComboBox.SelectionChangedEvent;
List<ComboBoxItem> remove = new List<ComboBoxItem> {myComboBox.Items[0] as ComboBoxItem},
add = new List<ComboBoxItem> {myComboBox.SelectedItem as ComboBoxItem};
var e = new SelectionChangedEventArgs(routed, remove, add);
myComboBox.RaiseEvent(e);
Run Code Online (Sandbox Code Playgroud)
或者,如果您想在单个命令中执行此操作:
myComboBox.RaiseEvent(new SelectionChangedEventArgs(
ComboBox.SelectionChangedEvent,
new List<ComboBoxIem> {myComboBox.Items[0] as ComboBoxItem},
new List<ComboBoxItem> {myComboBox.SelectedItem as ComboBoxItem}));`
Run Code Online (Sandbox Code Playgroud)
非常简单。但我同意 @RohitVats 和 @BradleyDotNet 的观点,即通过创建另一种方法来执行相同的功能会更好,该方法采用通常的事件处理程序参数并从任何其他方法调用它。
如果其他人不想接受这个建议,我仍然会留在这里。无论如何,知道如何以这种方式引发事件是件好事。
您刚刚说过您只需要执行处理程序,因此您无需担心引发实际事件。只需调用处理程序(我假设您可以访问该处理程序,因为您可以访问组合框本身):
SelectionChangedHandler(myComboBox, new RoutedEventArgs());
Run Code Online (Sandbox Code Playgroud)
现在这有点像黑客,你应该真正重构需要重新运行到新函数中的逻辑:
private void SelectionChangedHandler(object sender, RoutedEventArgs e)
{
...Stuff that you don't rerun
CommonHandleLogic();
}
private void CommonHandleLogic()
{
...Whatever you do
}
Run Code Online (Sandbox Code Playgroud)
然后您可以直接调用CommonHandleLogic()而不是尝试引发事件。
| 归档时间: |
|
| 查看次数: |
5444 次 |
| 最近记录: |