2012-08-07 65 views
0

我使用由定義的組合框:我可以使WPF組合框對待子字符串作爲新值嗎?

<ComboBox Grid.Column="2" Height="29" HorizontalAlignment="Left" Margin="137,192,0,0" Name="componentsComboBox" VerticalAlignment="Top" Width="224" 
       IsEditable="True" 
       TextSearch.TextPath="Name"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Name}" /> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

通過他們的「名稱」屬性..to顯示對象的列表。我正在觀察以下行爲:

  1. 在下拉列表中單擊一個項目,componentsComboBox.SelectedValue(和.SelectedItem)對應於單擊的項目。好!
  2. 開始鍵入項目的名稱,當您鍵入時,自動完成填充,.SelectedValue(和.SelectedItem)對應於自動完成的項目。大!
  3. 開始鍵入項目的名稱,當您鍵入時自動完成填充,命中刪除僅截取到您實際鍵入的內容,.SelectedValue和.SelectedItem STILL對應於自動完成的項目。沒有!壞的WPF!壞!
  4. 類似行爲,以3如果從文本框部分

在本質上,結束刪除字符,如果我有一個包含由定義的兩個對象列表,例如,

{ new Component() { Name = "COMPONENT1"}, 
    new Component() { Name = "COMPONENT2"} } 

我想要的值:

  • COMPONENT1
  • COMPONENT2

出現在下拉部分,如果用戶輸入「COMP」我想認識他們已經進入了一個新的價值,但因爲它代表權的控制,使它看起來就像他們選擇COMPONENT1。

我在這裏錯過了什麼?

回答

0

你可以通過IsEditable和IsReadOnly屬性設置爲分別真&假WPF中做到這一點很容易。

參考:http://msdn.microsoft.com/en-us/library/system.windows.controls.combobox.iseditable.aspx

例如How can I allow users to edit text in a ComboBox in WPF?

<Window x:Class="LearnWPF.EditableComboBox.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="LearnWPF.EditableComboBox" Height="300" Width="300" 
    > 
    <Window.Resources> 
    <XmlDataProvider x:Key="items" XPath="//item"> 
     <x:XData> 
     <items xmlns=""> 
      <item>01</item> 
      <item>02</item> 
      <item>03</item> 
     </items> 
     </x:XData> 
    </XmlDataProvider> 
    </Window.Resources> 
    <Grid> 
     <ComboBox IsEditable="True" DataContext="{StaticResource items}" 
       ItemsSource="{Binding}"/> 
    </Grid> 
</Window> 
+0

這是我已經有的行爲(IsEditable);它沒有解決爲什麼如果我在ComboBox中鍵入「02」,然後從結尾刪除「2」(在ComboBox中只留下「0」),ComboBox.SelectedItem,.SelectedIndex和。 SelectedValue全部對應於值「01」,而我期望它們是.SelectedItem = null,.SelectedValue = null,.SelectedIndex = -1(因爲它們是如果我鍵入的值不是*的一個子字符串現有的值;這是我想模仿值爲「0」的行爲 - 除非有更好的/支持的區分方式)。 – 2012-08-07 20:06:59

0

我今天遇到過這種行爲,並同意在表面上,這似乎是一個錯誤。挖掘更深一點,但揭示了一些灰色地帶。

我的想法是怎麼回事是控制運行,無論是導致要更新的文本框中的每一個按鍵的文本框中被更新時的前綴匹配算法。因此,當您刪除文本的自動完成部分時,前綴匹配算法仍然匹配控件的ItemsSource中的項目;該控件不會試圖推斷最終用戶剛剛刪除了自動完成的部分,因此算法不應該運行。

Re:您對akjoshi的迴應的評論,當您刪除「2」時,只在組合框的文本框中留下「0」,前綴匹配算法正確匹配「01」項。

我以前是隻綁定到ComboBox的Text屬性,並建立所有視圖模型邏輯斷了,周圍的工作。 SelectedItem,SelectedIndex和SelectedValue根本沒有綁定。

相關問題