none
为何 WPF ComboBox 的 SelectedValue 在某些机器上为 null ??bug?? RRS feed

  • 问题

  • 大家好,我的代码是这样的:

    <ComboBox x:Name="comboBox1" SelectedValuePath="Id" DisplayMemberPath="Name" SelectionChanged="comboBox1_SelectionChanged"/>
    private void LoadData()
    {
        // 省略读取数据部分,id=1是肯定存在的.......
        comboBox1.ItemsSource = list;
        comboBox1.SelectedValue = 1;
    }
    
    private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        // 这里的id在有些机器上是1,有些机器上为null,数据都是一样,
        var id = comboBox1.SelectedValue;
    }

    如果改成以下语句就在所有机器上都正常了:

    comboBox1.SelectedItem = list[0];
    也就是说,通过设定SelectedValue来选定某项的方式,在有些机器上会延迟执行,以至于在SelectionChanged事件中访问不到SelectedValue,
    但设定SelectedItem就正常了,

    SelectedValue是个坑?bug??


    2017年9月12日 4:49

答案


  • Hi jesse hao,

    >>SelectedValue是个坑?bug??

    这不是一个坑。

    SelectedItem属性返回列表绑定到Item的整个对象。

    所当你已经绑定了一个类别对象的集合(比如每个Category对象具有Name和ID属性)。 SelectedItem属性将返回当前选择的类别对象(Object)。 所以当你指定SelectedItem等于集合中的一个对象的时候,他能准确定位到是那个Item,并返回你指定的SelectedValue值(string). 所以你不能用SelectedValue来指定comboBox1的选中项。

    SelectedValuePath属性和SelectedValue属性来获取当前选择项所指定的值,它们并不是用来指定当前项。一般我们用此组合来获取SelectedItem对象的的指定属性值。

    请使用SelectedIndex或者SelectedItem来指定当前项。

    你可以参考微软文档:

    How to: Use SelectedValue, SelectedValuePath, and SelectedItem:
    https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/how-to-use-selectedvalue-selectedvaluepath-and-selecteditem


    Best Regards,

    Yohann Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2017年9月13日 2:13
    版主