【问题标题】:UWP ComboBox SelectedValue not being set未设置 UWP ComboBox SelectedValue
【发布时间】:2018-01-09 02:42:22
【问题描述】:

我显然没有掌握使用 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 为空。如果我将 SelectedIndex 设置为适当的值 [参见评论],组合框将起作用 - 它已被加载。

【问题讨论】:

    标签: c# xaml combobox uwp selectedvalue


    【解决方案1】:

    感谢您的反馈。这是SelectedValue 不适用于枚举类型的已知问题。

    目前,作为一种解决方法,您可以像以前一样使用SelectedIndexSelectedItem。但是,请注意Dictionary 是作为哈希表实现的。 Dictionary 中没有这样的“索引”概念。订单是未定义的,我们不能依赖它。因此,对于您的场景,使用SelectedItem 可能会更好。

    更多信息,您可以查看this answer

    【讨论】:

      【解决方案2】:

      感谢 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 ;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-24
        • 2017-11-02
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-10
        • 1970-01-01
        相关资源
        最近更新 更多