C# 更改组合框文本但不更改选定项

C# 更改组合框文本但不更改选定项,c#,wpf,combobox,C#,Wpf,Combobox,我有一个组合框,其中包含应用程序中定义的每个FilterViewModel的一个项。每个FilterViewModel都有一个包含筛选器名称的DisplayName属性。当前选定的筛选器实例保存在SelectedFilter属性中 我希望用户能够从下拉列表中选择现有项目,但也可以在文本框中更改选定过滤器的名称。输入其他名称不得更改项目选择。始终选择一个筛选器,但决不能没有选择筛选器 以下是XAML代码: <ComboBox IsEditable="True" IsTextSearc

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

我希望用户能够从下拉列表中选择现有项目,但也可以在文本框中更改选定过滤器的名称。输入其他名称不得更改项目选择。始终选择一个筛选器,但决不能没有选择筛选器

以下是XAML代码:

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

我找不到ComboBox的TextChanged事件,简单地让它保持原样并不会更改所选项目的绑定文本属性DisplayName(我本来希望如此)

我能做些什么使其按上述方式工作


背景是,此组合框用于我的应用程序的“设置”对话框,在该对话框中可以管理(创建、复制、重命名、删除)过滤器,并编辑其过滤器条件。我想保存额外的按钮和窗口或文本框来重命名过滤器,但直接提供该功能。如果您看到过滤器名称,只需单击它并键入以更改它。但是我还想使用组合框提供一个下拉选择菜单来切换过滤器。

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

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


太棒了!简单有效的解决方案。这里有一些代码可以选择组合框中的所有文本。它可以连接到SelectionChanged事件:非常感谢。在我的案例中,我在测试时发现了一些东西,如果IsTextSearchEnabled为true,则在更改DisplayName时SelectedFilter将更改为null,因此我在set分支的属性中添加了一个额外的检查:if(value!=null){u SelectedFilter=value;PropertyChanged(这是新的PropertyChangedEventArgs(“SelectedFilter”);}。现在它可以很好地用于我的场景,如果没有您的示例,我无法到达这里。