我有一个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;