2013-07-23 35 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;}