更改 ComboBox 文本但未选择项

Posted

技术标签:

【中文标题】更改 ComboBox 文本但未选择项【英文标题】:Change ComboBox text but not selected item 【发布时间】:2014-03-03 22:58:40 【问题描述】:

我有一个 ComboBox,其中包含我的应用程序中定义的每个 FilterViewModel 的项目。每个 FilterViewModel 都有一个 DisplayName 属性,其中包含过滤器的名称。当前选择的过滤器实例保存在 SelectedFilter 属性中。

我希望用户能够从下拉列表中选择现有项目,同时在文本框中更改所选过滤器的名称。输入其他名称不得更改项目选择。总是选择一个过滤器,永远不可能没有选择过滤器。

这是 XAML 代码:

<ComboBox
    IsEditable="True" IsTextSearchEnabled="False"
    ItemsSource="Binding Filters"
    SelectedItem="Binding SelectedFilter"
    DisplayMemberPath="DisplayName"/>

我找不到 ComboBox 的 TextChanged 事件,简单地让它保持原样不会更改所选项目的绑定文本属性 DisplayName(我早就料到了)。

我可以怎样做才能让它按上述方式工作?

背景是这个 ComboBox 在我的应用程序的设置对话框中使用,可以管理(创建、复制、重命名、删除)过滤器,并且可以编辑它们的过滤条件。我想为我节省额外的按钮和窗口或文本框来重命名过滤器,但直接就地提供该功能。您会看到过滤器名称,只需单击它并键入即可更改它。但我也想使用 ComboBox 有一个下拉选择菜单来切换过滤器。

【问题讨论】:

【参考方案1】:

这应该允许您更改SelectedFilterDisplayName 而无需更改SelectedFilter 本身:

<ComboBox 
    ItemsSource="Binding Filters" 
    SelectedItem="Binding SelectedFilter" 
    DisplayMemberPath="DisplayName"
    Text="Binding SelectedFilter.DisplayName, Mode=TwoWay"
    IsEditable="True" 
    IsTextSearchEnabled="False"/>

【讨论】:

太棒了!简单有效的解决方案。这里有一些代码将选择 ComboBox 中的所有文本。它可以与 SelectionChanged 事件挂钩:***.com/a/2151815/143684 非常感谢。我在测试时发现了一些东西,如果 IsTextSearchEnabled 为真,则 SelectedFilter 将在更改 DisplayName 时更改为 null,因此我在 set 分支上的属性中添加了一个额外的检查: if (value != null) _SelectedFilter = value ; PropertyChanged(this, new PropertyChangedEventArgs("SelectedFilter")); 。现在它适用于我的场景,没有你的例子我无法到达这里。

以上是关于更改 ComboBox 文本但未选择项的主要内容,如果未能解决你的问题,请参考以下文章

jquery easyui combobox 添加添加选择项

如何关联 Combobox 的选中项写入文件

Ext.form.ComboBox用JSON数据源下拉框不显示选项,点击一个选择项在文本框可以显示值,求指导

读取 SQL 表单元格值,仅更改 ComboBox.text 而不更改 ComboBox 集合项

如何获取 ComboBox 的值?

React 路由器更改 url 但未更新上下文