UWP ComboBox选定值未被设置

3
我显然不理解如何使用SelectedValue在UWP中更改组合框显示的项目。
XAML很简单。
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ComboBox x:Name="comboBoxColor" />
</Grid>

代码后端并不是很深入。

    public MainPage()
    {
        this.InitializeComponent();
    }

    public void page_Loaded(object sender, RoutedEventArgs e)
    {
        populateDdlMultiColor();

        comboBoxColor.SelectedValue = Colors.Red;
        //comboBoxColor.SelectedIndex = 0 works tho
    }

    private void populateDdlMultiColor()
    {
        comboBoxColor.ItemsSource = ColorDict();
        comboBoxColor.DisplayMemberPath = "Key";
        comboBoxColor.SelectedValuePath = "Value";


    }

    private Dictionary<string,Color> ColorDict()
    {
        Dictionary<string, Color> L = new Dictionary<string, Color>();
        L.Add("reddish",Colors.Red);

        return L;
    }

这显然是玩具问题,但它与我的代码失败方式相同:在设置了SelectedValue之后,组合框位于索引-1并且SelectedValue为null。如果我将SelectedIndex设置为正确的值[见注释],则组合框可以正常工作 - 它已经被加载。

2个回答

1
感谢您的反馈。这是一个已知问题,SelectedValue 与枚举类型不兼容。
目前,可以像您所做的那样使用 SelectedIndexSelectedItem 作为解决方法。但请注意,Dictionary 实现为哈希表,在 Dictionary 中没有“索引”的概念。顺序是未定义的,我们不能依赖它。因此,在您的情况下,使用 SelectedItem 可能更好。
有关更多信息,请参见 this answer

0
感谢Jay Zuo让我找到了正确的方向!在我的情况下,将颜色转换为整数作为已知问题的解决方法非常容易。虽然不适用于所有枚举,但任何构建颜色下拉菜单的人[在UWP中]可能会发现这很方便。请注意字典的更改。
    public MainPage()
    {
        this.InitializeComponent();
    }

    public void page_Loaded(object sender, RoutedEventArgs e)
    {
        populateDdlMultiColor();

        comboBoxColor.SelectedValue = ColorInt(Colors.Red);
    }

    private void populateDdlMultiColor()
    {
        comboBoxColor.ItemsSource = ColorDict();
        comboBoxColor.DisplayMemberPath = "Key";
        comboBoxColor.SelectedValuePath = "Value";


    }

    private Dictionary<string,int> ColorDict()
    {
        Dictionary<string, int> L = new Dictionary<string, int>();
        L.Add("reddish",ColorInt(Colors.Red));

        return L;
    }

    private int ColorInt(Color c)
    {

        return (c.A*16777216) + (c.R*65536) + (c.G*256) + c.B ;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接