2013-07-23 37 views
2

我有一個ComboBoxObservableCollection綁定。當用戶在ComboBox中輸入文本時,我該怎麼辦?如果項目不在列表中,代碼會自動向列表中添加一個新項目?您的組合框到您的視圖模型項目和WPF - Combobox - 當用戶在組合框中輸入文本時添加項目

<ComboBox Name="cbTypePLC" 
      Height="22" 
      ItemsSource="{StaticResource TypePLCList}" 
      SelectedItem="{Binding TypePLC}" IsReadOnly="False" IsEditable="True"> 
</ComboBox> 

回答

7

綁定Text屬性,然後添加到綁定的集合有一樣,

Text="{Binding UserEnteredItem, UpdateSourceTrigger=LostFocus}" 

更改UpdateSourceTrigger來引發LostFocus因爲默認(的PropertyChanged)交流會每角色改變到你的視圖模型。

// user entered value 
private string mUserEnteredItem; 
public string UserEnteredItem { 
    get { 
     return mUserEnteredItem; 
    } 
    set { 
     if (mUserEnteredItem != value) { 
      mUserEnteredItem = value; 

      TypePLCList.Add (mUserEnteredItem); 

      // maybe you want to set the selected item to user entered value 
      TypePLC = mUserEnteredItem; 
     } 
    } 
} 

// your selected item 
private string mTypePLC; 
public string TypePLC { 
    get { 
     return mTypePLC; 
    } 
    set { 
     if (mTypePLC != value) { 
      mTypePLC = value; 

      // notify change of TypePLC INPC 
     } 
    } 
} 

// your itemsource 
public ObservableCollection <string> TypePLCList { set; private set;}