我有一个 ComboBox,其中包含应用程序中定义的每个 FilterViewModel 的项目。每个 FilterViewModel 都有一个包含过滤器名称的 DisplayName 属性。当前选择的过滤器实例保存在 SelectedFilter 属性中。
我希望用户能够从下拉列表中选择现有项目,但也可以在文本框中更改所选过滤器的名称。输入另一个名称不得更改项目选择。永远只有一个过滤器被选中,不可能没有过滤器被选中。
这是 XAML 代码:
<ComboBox
IsEditable="True" IsTextSearchEnabled="False"
ItemsSource="{Binding Filters}"
SelectedItem="{Binding SelectedFilter}"
DisplayMemberPath="DisplayName"/>
我找不到 ComboBox 的 TextChanged 事件,只是让它保持原样不会更改所选项目的绑定(bind)文本属性 DisplayName(我已经预料到了)。
我该怎么做才能让它像上面描述的那样工作?
背景是我的应用程序的设置对话框中使用了这个 ComboBox,可以在其中管理过滤器(创建、复制、重命名、删除)并且可以编辑它们的过滤器条件。我想为我节省额外的按钮和窗口或文本框来重命名过滤器,但直接就地提供该功能。您会看到过滤器名称,只需单击它并键入即可更改它。但我也想使用 ComboBox 有一个下拉选择菜单来切换过滤器。
最佳答案
这应该允许您更改 SelectedFilter
的 DisplayName
而无需更改 SelectedFilter
本身:
<ComboBox
ItemsSource="{Binding Filters}"
SelectedItem="{Binding SelectedFilter}"
DisplayMemberPath="DisplayName"
Text="{Binding SelectedFilter.DisplayName, Mode=TwoWay}"
IsEditable="True"
IsTextSearchEnabled="False"/>
关于c# - 更改 ComboBox 文本但不更改所选项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21612375/