如果我使用以下类型的代码,则WPF comboBox的SelectionChanged事件未触发
cmbFunctionsList.Items.Add("sameItem");
cmbFunctionsList.Items.Add("sameItem");
cmbFunctionsList.Items.Add("sameItem");
cmbFunctionsList.Items.Add("sameItem");
cmbFunctionsList.Items.Add("sameItem");
是否有任何解决方法。
答案 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
的想法