未设置UWP ComboBox SelectedValue

时间:2017-08-02 03:59:39

标签: c# xaml combobox uwp selectedvalue

我显然没有掌握使用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 个答案:

答案 0 :(得分:1)

感谢您的反馈。这是SelectedValue无法使用枚举类型的已知问题。

目前,作为一种解决方法,您可以像使用SelectedIndexSelectedItem一样使用。但请注意,Dictionary是作为哈希表实现的。没有这样一个&#34;指数&#34;的概念。在Dictionary内。订单未定义,我们无法依赖它。因此,对于您的方案,使用SelectedItem可能会更好。

有关详细信息,请参阅this answer

答案 1 :(得分: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 ;
    }