WPF组合框(带IsEditable) -当从选项列表中删除时,防止所选项目被删除



我有一个ComboBox,IsEditable设置为true。如果我输入一个自定义选项,然后重置选项列表(甚至删除所有选项),则显示的文本不会改变。这正是我想要的。但是,如果我选择或键入列表中的一个选项,然后从列表中删除该选项,则所选文本将重置为null或空字符串。在第二个实例中,我希望所选文本不改变(实际上变成自定义条目)。

我尝试使用SourceUpdated并将Handled设置为true,但该事件不会触发我是否尝试用新的ObservableCollection或调用Clear替换它。

另外,手动管理该值是有问题的,因为在响应更改时延迟触发控件本身的事件。如果我使用下面的代码,控制响应更新后的列表(并重置值)后,一切都完成执行。

string holdValue = SelectedListString;
ListOptions.Clear();
SelectedListString = holdValue;

这是一个' nice to have ';所以我希望有一个简单的解决方案,不能使用第三方库。最坏的情况下,我想我可以做一些hack的变化跟踪,然后防止值被修改,当setter被调用依赖属性SelectedListString,但我希望更简单的东西。

你可以像这样绑定你的'SelectedListString'属性和'ComboBox'的'Text'属性

<ComboBox IsEditable="True"
ItemsSource="{Binding ListOptions}"
SelectedItem="{Binding SelectedListString}"
Text="{Binding SelectedListString}"/>

当你清除列表时,你手动保留这个值,就像你做的

一样
string holdValue = SelectedListString;
ListOptions.Clear();
SelectedListString = holdValue;

最新更新