在 WPF/C# 中选择绑定项后维护组合框文本
Maintaining combobox text after selecting a bound item in WPF / C#
我有一个 WPF ComboBox,我用它来搜索名字。我使用 MVVM 模式,这一切都非常简单:
组合框文本 属性 绑定到 VM 上的 "SearchString" 属性。 ComboBox ItemsSource 绑定到 VM 上的 "SearchResult" 属性。这是使用 DataTemplate 显示的对象列表。 ComboBox 还会触发一个 "PreviewKeyDown" 事件,然后按回车键选择结果集中的第一项,使用向上和向下箭头键遍历结果。 SelectedItem 绑定到 GroupBox 的 DataContext。这部分效果非常好。
当在 ComboBox 中选择一个项目时,WPF 会自动尝试用我的 SelectedItem 替换 "Text"。这导致我的结果集被清空并且 "Text" 恢复为空字符串。
我喜欢的行为是,当一个项目被选中时,ComboBox 中的文本保持完全相同,这样我的用户可以继续遍历结果集使用向上和向下箭头。
有什么优雅的方法可以做到这一点吗?我认为使用代码片段不会向问题添加任何内容,但如果需要,我们很乐意提供。
The behaviour I'd like is that when an item is selected, the text in the ComboBox remains exactly the same, so that my user can continue to traverse the result set using up and down arrows.
这是 ComboBox
控件中未内置的要求。如果你想要那样的东西,你必须自己构建它(子类化很可能无济于事,为此你必须从头开始构建 ComboBox
的大部分)。
事实上你也不应该像那样绑定当前项目,你应该使用 SelectedItem
属性,它不做任何转换或复制,正是你想要的内部绑定。
我有一个 WPF ComboBox,我用它来搜索名字。我使用 MVVM 模式,这一切都非常简单:
组合框文本 属性 绑定到 VM 上的 "SearchString" 属性。 ComboBox ItemsSource 绑定到 VM 上的 "SearchResult" 属性。这是使用 DataTemplate 显示的对象列表。 ComboBox 还会触发一个 "PreviewKeyDown" 事件,然后按回车键选择结果集中的第一项,使用向上和向下箭头键遍历结果。 SelectedItem 绑定到 GroupBox 的 DataContext。这部分效果非常好。
当在 ComboBox 中选择一个项目时,WPF 会自动尝试用我的 SelectedItem 替换 "Text"。这导致我的结果集被清空并且 "Text" 恢复为空字符串。
我喜欢的行为是,当一个项目被选中时,ComboBox 中的文本保持完全相同,这样我的用户可以继续遍历结果集使用向上和向下箭头。
有什么优雅的方法可以做到这一点吗?我认为使用代码片段不会向问题添加任何内容,但如果需要,我们很乐意提供。
The behaviour I'd like is that when an item is selected, the text in the ComboBox remains exactly the same, so that my user can continue to traverse the result set using up and down arrows.
这是 ComboBox
控件中未内置的要求。如果你想要那样的东西,你必须自己构建它(子类化很可能无济于事,为此你必须从头开始构建 ComboBox
的大部分)。
事实上你也不应该像那样绑定当前项目,你应该使用 SelectedItem
属性,它不做任何转换或复制,正是你想要的内部绑定。