2017-08-20 115 views
0

我有一個組合框和一個按鈕。當我點擊按鈕時,應該更改選定的值,然後在更改項目時觸發代碼。不幸的是,在我設置組合框的選定值之前,選擇改變了事件觸發。使用選定值(C#WPF)時選擇更改之前組合框選擇更改事件觸發

我的組合框的初始化代碼:

ListCB.SelectedValuePath = "Key"; 
ListCB.DisplayMemberPath = "Value"; 
ListCB.Items.Add(new KeyValuePair<int, string>(1, "One")); 

ListCB.SelectedValuePath = "Key"; 
ListCB.DisplayMemberPath = "Value"; 
ListCB.Items.Add(new KeyValuePair<int, string>(2, "Two")); 

ListCB.SelectedValuePath = "Key"; 
ListCB.DisplayMemberPath = "Value"; 
ListCB.Items.Add(new KeyValuePair<int, string>(3, "Three")); 

我的按鈕的代碼:

ListCB.SelectedValue = 3; 

我的選擇更改事件:

private void ListCB_Change(object sender, SelectionChangedEventArgs e) 
{ 
    MessageBox.Show("Value is now: " + ListCB.SelectedValue); 
} 

什麼情況是,如果比如我選1從組合框中單擊按鈕,它會顯示現在的值是:一個而不是三個。

我使用了錯誤的事件嗎?還是我用錯誤的方式來改變選定的值?

+0

ListCB.SelectedIndex按預期工作,但不幸的是,內容是揮發性它不是可行的我的使用。 –

回答

0

使用SelectionChangedEventArgs得到新選定的項目

private void ListCB_Change(object sender, SelectionChangedEventArgs e) 
{ 
    var item = (KeyValuePair<int, string>)e.AddedItems[0]; 
    MessageBox.Show("Value is now: " + item.Key); 
} 
+0

謝謝,這個工作,它現在說正確的價值。不過,我有一個問題,只有在消息框完成後,組合框項目更新的原因是什麼? –

+0

@KlausBean對於它的工作原理有一個很好的解釋https://stackoverflow.com/a/31574510/2189031。簡而言之,在將'sender'轉換爲'ComboBox'之後,您需要使用'SelectedItem'而不是'SelectedValue'。 – Mitya

+0

對不起,我剛剛回來,謝謝你的鏈接。 –

相關問題