WPF - 组合框 - 当用户在组合中输入文本时添加项目

标签 wpf combobox observablecollection

我有一个 ComboBoxObservableCollection 绑定(bind).当用户在 ComboBox 中输入文本时我该怎么办? ,如果项目不在列表中,代码会自动将新项目添加到列表中吗?

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

最佳答案

将组合框的 Text 属性绑定(bind)到 View 模型项,然后添加到那里的绑定(bind)集合中,例如,

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

将 UpdateSourceTrigger 更改为 LostFocus,因为默认 (PropertyChanged) 会将每个字符更改传达给您的 View 模型。
// 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;} 

关于WPF - 组合框 - 当用户在组合中输入文本时添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17805798/

相关文章:

c# - 为什么在 .NET 4.6 中更改 WPF DataGrid ItemsSource 如此缓慢?

excel - 如何使用与特定日期匹配的数据集填充组合框

c# - 如何使用组合框向数据源添加新项目?

c# - WrapPanel 不在 WPF ListView 中换行

c# - DataTable 在清除和重新填充数据后不更新 DataGrid。 MVVM

c# - 检查两个键是否匹配无法正常工作

c# - 将数据从数据层获取到 View 中的 observablecollection

c# - 将 ObservableCollection 过滤到多个列表框

c# - 使用 WPF 的 Entity Framework 存储库模式

c# - 使用 ReactiveUI 与 PasswordBox 进行两种方式绑定(bind)