c# - 可编辑组合框为空时不更新

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

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

            <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/

相关文章:

c# - 如何将 IoC 容器保持在一个地方,而内部类需要在 bee 构造后创建依赖项

c# - 非常奇怪的 Application.ThreadException 行为

c# - 为什么我的所有换行符都从 "/r/n"更改为 "/n/",我该如何阻止这种情况发生?

c# - 使用 linq 对具有空属性的对象列表进行排序

c# - IDE 条件 block 突出显示

c# - 向其他进程发送消息

wpf - 使用 WiX 从应用程序的主要升级上的 Windows 7 任务栏中删除固定应用程序的图标

Azure DEVOPS 中的 GIT 错误 - SSL 证书问题 : self signed certificate in certificate chain Pushing

.net - 我可以在 Visual Studio 2015 中打开旧的 Visual Studio 解决方案(2005、2008、2010、2013)而不升级项目吗?

c# - Visual Studio 项目代码分析器路径已更改