DisplayMemberPath =" Value"的替代方案是什么?对于Windows应用商店应用?

时间:2015-04-23 07:56:15

标签: c# xaml combobox windows-store-apps winrt-xaml

我认为在使用DisplayMemberPath =" Value"时,Windows应用商店应用存在一个错误。

这是我的代码

    <ComboBox Height="40" VerticalAlignment="Stretch" SelectedValuePath="Key" DisplayMemberPath="Value" x:Name="comboBox1" FontSize="25"/>

var source = new Dictionary<string, double>();
            source.Add("Item1", 0.4);
            source.Add("Item2", 0.3);
            source.Add("Item3", 0.1);
            source.Add("Item4", 0.1);

            var formateDSource = new Dictionary<string, string>();

            foreach (var item in source)
            {
                formateDSource.Add(string.Format("[{0}, {1}]", item.Key, item.Value), item.Key);
            }

            comboBox1.ItemsSource = source;

如果您在WPF中使用此代码完美无缺。但是,如果在Windows应用商店应用程序中使用此代码,则组合框为空并且会引发错误。那么在Windows应用商店应用程序中是否有另一种方法可以解决这个问题?因为我已经对网络进行了几天的研究并且没有找到解决方案。*请不要发表评论,除非您已将我的代码作为Windows应用商店应用而不是Visual Studio中的WPF。

1 个答案:

答案 0 :(得分:0)

我已经能够在通用应用程序(Windows手机版)中重现它。

要解决此问题,请首先删除组合框中的“高度”属性值,因为它会阻止组合框在您打开它时显示选项(至少在Windows Phone上)。

然后,在您的代码中,尝试将您的Dictionnary转换为对象的列表(或另一个Dictionnary)(我使用匿名对象,但您最好创建自定义类型):

comboBox1.ItemsSource = formateDSource.Select(f => new { Key = f.Key, Value = f.Value }).ToList();

所以我的xaml看起来像这样:

<ComboBox x:Name="comboBox1"
              VerticalAlignment="Stretch"
              DisplayMemberPath="Value"
              FontSize="25"
              SelectedValuePath="Key" />

现在,我真的不明白原始词典会发生什么,但至少你现在应该有一个解决方法。