我这里有一个可编辑的组合框:
<ComboBox IsEditable="True"
Text="{Binding Model.TNumber}" SelectedItem="{Binding SelectedT}" ItemsSource="{Binding TList}"
IsEnabled="{Binding EnableTComboBox}"/>
组合框可以工作,除非您将其退格并设为空。
该框将默认为列表中的第一个值。
如果我退格并将组合框留空,变量 TNumber 仍将包含之前输入的数字。
有没有办法让变量为空?
TNumber 是一个缩写。
最佳答案
我不确定您是在哪个点检查 TNumber
的值,但是您可以做的是在 SelectionChanged
事件处理程序中设置它的值:
private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
TNumber = (sender as ComboBox).SelectedItem as short?;
}
但这需要您将 TNumber
定义为可空短字符 (short?
)。
或者,如果您不想允许可空的short
,您可以使用:
private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var newValue = (sender as ComboBox).SelectedItem;
if (newValue == null)
TNumber = 0;
else
TNumber = (short)newValue;
}
首先检查新值是否等于 null。如果是,那么我们将 TNumber
设置为 0(或您需要的任何值)。
在对此进行测试时,我注意到 TNumber
似乎在SelectioinChanged
事件触发后 更新,这意味着每当您检查该值时TNumber
在事件中,它将包含以前的值。
解决此问题的一种方法是将此行添加到事件处理程序的顶部:
comboBox.Items.Refresh();
将 TNumber
设置为新值。 但是从ComboBox
中删除值时,这不起作用! (在这种情况下,TNumber
再次仅在 SelectionChanged
事件处理程序之后更新)。
我不知道这是为什么,但我在将 TNumber
作为 short?
时也进行了测试,结果相同。
private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
comboBox.Items.Refresh();
var value = (sender as ComboBox).SelectedItem; // Tested using short? with same result
var x = TNumber;
}
也许其他人可以阐明为什么会发生这种情况,或者从绑定(bind)中更新 TNumber
值的确切时间点。
关于c# - 可编辑组合框为空时不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42424118/