更改 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】:这应该允许您更改SelectedFilter
的DisplayName
而无需更改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 添加添加选择项
Ext.form.ComboBox用JSON数据源下拉框不显示选项,点击一个选择项在文本框可以显示值,求指导