【问题标题】:Editable Combobox not updating when empty可编辑的组合框在为空时不更新
【发布时间】:2017-07-14 10:16:50
【问题描述】:

我在这里有一个可编辑的组合框:

            <ComboBox IsEditable="True"
                  Text="{Binding Model.TNumber}" SelectedItem="{Binding SelectedT}"  ItemsSource="{Binding TList}"  
                  IsEnabled="{Binding EnableTComboBox}"/>

组合框可以使用,除非您将其退格并将其留空。
该框将默认为列表中的第一个值。
如果我退格并将组合框留空,则变量 TNumber 仍将包含先前输入的数字。
有没有办法让变量为空?
TNumber 很短。

【问题讨论】:

    标签: c# wpf visual-studio data-binding combobox


    【解决方案1】:

    我不确定您在什么时候检查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 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2020-12-14
      相关资源
      最近更新 更多