如果WPF comboBox中包含相同的项目,则不会触发它

时间:2011-10-12 10:50:02

标签: c# .net wpf

如果我使用以下类型的代码,则WPF comboBox的SelectionChanged事件未触发

cmbFunctionsList.Items.Add("sameItem");
cmbFunctionsList.Items.Add("sameItem");
cmbFunctionsList.Items.Add("sameItem");
cmbFunctionsList.Items.Add("sameItem");
cmbFunctionsList.Items.Add("sameItem");

是否有任何解决方法。

3 个答案:

答案 0 :(得分:5)

如果当前选定的项目和所选的新项目被新选择的对象(即object.Equals())上调用的newlyslected.Equals(currentlySelected)方法视为相等,则WPF组合框不会更改所选项目。 / p>

在这种情况下,string.Equals方法返回true,因为字符串的值相等

答案 1 :(得分:2)

这当然是一个奇怪的问题。我能想到的唯一解决方法是存储组合框的索引,每次发生任何事情时(KeyDown,LeftMouseButtonDown等)都会根据新索引检查存储的索引。类似的东西:

public MainWindow()
{
    InitializeComponent();
    //populate combo box
    lastKnownIndex = comboBox1.SelectedIndex;
}

int lastKnownIndex;

private void comboBox1_KeyDown(object sender, KeyEventArgs e) // and all other possible input events
{
    if (comboBox1.SelectedIndex != lastKnownIndex)
    {
        //do stuff
        lastKnownIndex = comboBox1.SelectedIndex;
    }
}

可能有一个更优雅的解决方案,但这应该有效。

编辑:也应该让MSFT知道WPF已经坏了;)

答案 2 :(得分:2)

尝试这样做:

ComboBoxItem newItem = new ComboBoxItem();
newItem.Content = "same item";
cmbFunctionsList.Items.Add(newItem);

来自here

的想法