首页 > 解决方案 > 我的 ComboBox SelectionChangedEvent 发送先前选择的项目

问题描述

因此,每当我更改选择时,我都需要调用一个方法,将新选择与不同的选项进行比较。问题是,它总是发送在此之前选择的对象

最初我以为我可以反转选择,但这仅适用于 2 个选项。

// Create the Combobox
ComboBox selectType = new ComboBox();
selectType.Text = "Select Type";
selectType.SelectionChanged += CallChange;

ComboBoxItem sortingAlgorithm = new ComboBoxItem();
sortingAlgorithm.Content = "Sorting Algorithm";

ComboBoxItem searchingAlgorithm = new ComboBoxItem();
searchingAlgorithm.Content = "Searching Algorithm";

// add the items to ComboBox

// Call on new selection
void CallChange(object sender, SelectionChangedEventArgs args)
{
   _controller.ChangeType((string)selectType.SelectionBoxItem);
}

我认为它只是发送新的选择。我有任何思维错误还是我混淆了什么?我也知道使用字符串比较选择是非常糟糕的做法,我目前正在将其全部更改为字典

标签: c#wpf

解决方案


仅在处理更改的事件后传播所选项目。这允许在选定值可见之前对其进行操作。SelectionChanged因此,事件发生的那一刻,SelectionBoxItem还没有改变。您必须改为从args对象中引用所选项目:

// Call on new selection
void CallChange(object sender, SelectionChangedEventArgs args)
{
  _controller.ChangeType(args.AddedItems.OfType<string>().FirstOrDefault() ?? string.Empty);
}

推荐阅读