我不确定您在什么时候检查TNumber 的值,但您可以在SelectionChanged 事件处理程序中设置它的值:
private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
TNumber = (sender as ComboBox).SelectedItem as short?;
}
但这要求您将TNumber 定义为可空的short (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;
}
也许其他人可以解释为什么会发生这种情况,或者在什么时候从绑定中更新了 TNumber 值。