【发布时间】:2015-04-22 10:46:31
【问题描述】:
我对 DisplayMemberPath="Value" 的工作原理及其用途感到非常困惑。我复制了其他人的代码,但它从来没有以我期望的方式对我有用,而是在我单击组合框时出现错误。
“System.Reflection.TargetException”类型的异常发生在 mscorlib.dll 中,并且未在托管/本机边界之前处理
附加信息:对象与目标类型不匹配。
我的代码是
<ComboBox Height="40" VerticalAlignment="Stretch" SelectedValuePath="Key" DisplayMemberPath="Value" x:Name="comboBox1" FontSize="25"/>
var source = new Dictionary<int, string>();
source.Add(1,"Item1");
source.Add(2,"Item2");
source.Add(3,"Item3");
source.Add(4,"Item4");
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;
基本上,当我运行我的代码时,我希望在我的组合框中看到这样的列表:
项目1项目2项目3项目4
现在虽然我插入了一个包含键和值的字典,但我希望我的值会显示在我的组合框中,如上所示。这不是我们使用 DisplayMemberPath="Value" 的目的吗?那么为什么它会给我上面的错误呢?
当我从我的代码中删除 DisplayMemberPath="Value" 时,我的组合框可以工作,但会将其显示为列表:
[1,Item1] [2,Item2] [3,Item3] [4,Item4]
这对我没有好处,因为我不希望我的用户只看到键值。我可以将代码更改为:
comboBox1.ItemsSource = source.Values;
效果很好,但是我的组合框没有值的键,因此使我更难以获得用户选择的内容,或者这是获得我想要的结果的正确方法,而不是 DisplayMemberPath="价值”。如果我被误解了,有人可以解释 DisplayMemberPath="Value" 的使用以及为什么我的代码不起作用或如何获得我想要的结果吗?对不起,只是为那些有疑问的人补充。我已经将我的代码作为 wpf 应用程序进行了尝试,它运行良好,但作为 Windows 商店应用程序,它可以满足我的需要。为什么会这样,是否有一种适用于 Windows 商店应用程序的方法
【问题讨论】:
-
formateDSource是干什么用的?你好像没用过 -
这与您之前的问题有何不同?从您在此处发布的内容来看,无法说明为什么
DisplayMemberPath="Value"不起作用。它应该简单地工作,而且确实对我们其他人有用。您的应用程序中必须有更多,其他导致此错误的东西。 -
您是否将 SelectedValue 绑定到非 int 类型?这似乎是您的错误的可能来源。
标签: c# xaml combobox windows-store-apps windows-8.1