2012-01-30 78 views
1

所以我有一個綁定到DataSet的ComboBox,我希望事件只在選擇被更改時觸發。我試圖使用SelectionChanged事件,但只要有建議的項目就會觸發它。例如,如果我輸入「eb」,那麼將選擇「ebtoulson」並突出顯示「toulson」。我的問題是,我將如何禁用此事件發起建議或我使用錯誤的事件?任何建議將不勝感激。ComboBox SelectionChanged事件在預覽中觸發

+0

您是否爲您的問題提出瞭解決方案? – 2012-07-19 21:08:23

回答

0

當您輸入內容並出現一條建議時,您實際上正在更改所選項目,以便事件觸發。

您的具體需求是什麼使得這隻適用於UI?

+0

感謝您的回覆。爲了讓你更深入瞭解,我有一個客戶表單,並且我想要其他表單元素自動填充,具體取決於從組合框中選擇哪個客戶。但正如我所提到的,如果有人開始輸入客戶的姓名,並以相同的開頭字母給出了另一位客戶的建議,則會自動填充錯誤的信息。 – Ebtoulson 2012-01-31 05:14:52

0

我已經想出了這個解決方案。我不覺得這是最優的,但它涵蓋了你的情況。我正在使用PreviewTextInput事件來處理通過文本輸入的選擇,並使用DropDownClosed來處理通過鼠標的選擇。我ComboBox控制被命名爲cbTest1,和我使用的代碼如下:

private void cbTest1_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    var q = from i in cbTest1.ItemsSource.Cast<ComboBoxItem>() 
      where ((string)i.Content).StartsWith(e.Text, StringComparison.OrdinalIgnoreCase) 
      select i; 
    if (q.Count() == 1) 
    { 
     // Have typed out a unique name match. 
     var ActiveItem = cbTest1.SelectedItem; 
    } 
    else 
    { 
     // Name does not match or has multiple matches. 
    } 
} 

private void cbTest1_DropDownClosed(object sender, EventArgs e) 
{ 
    var ActiveItem = cbTest1.SelectedItem; 
} 

它使用LINQ表達式來確定哪些用戶迄今輸入縮小了選擇到一個單一的項目。但是,對於您的情況,該查詢的成本可能太高。試試吧,讓我知道。

相關問題