我很担心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;
基本上当我运行我的代码时,我希望在我的组合框中看到如下列表:
Item1 Item2 Item3 Item4
现在虽然我插入了一个包含键和值的字典,但我希望我的值会在上面的组合框中显示。这不是我们使用的DisplayMemberPath =&#34; Value&#34;对于?那为什么它会给我上面的错误?
当我删除DisplayMemberPath =&#34; Value&#34;从我的代码我的组合框工作,但显示为一个列表:
[1,Item1] [2,Item2] [3,Item3] [4,Item4]
这对我没有好处,因为我不希望我的用户只看到键的值。我可以将我的代码更改为:
comboBox1.ItemsSource = source.Values;
哪个工作得很好但是我的组合框没有值的键,因此让我更难以获得用户选择的内容或者是获得我想要的结果的正确方法而不是DisplayMemberPath =& #34;值&#34 ;.如果我被误解,可以解释一下DisplayMemberPath =&#34; Value&#34;为什么我的代码不起作用或我如何得到我想要的结果?对不起,只是为那些有疑问的人添加。我已经尝试将我的代码作为一个wpf应用程序,它可以很好地工作,但作为一个Windows应用程序,它确实是我需要的。为什么这样,有一种方法适用于Windows商店应用程序
答案 0 :(得分:1)
通常情况下,你会用某种列表或集合为你提供组合框。
假设您有一个名为Person
的类class Person{
public string Name{get;set;}
public int Age{get;set;}
}
现在你可以用一个人员列表向你提供组合框,但你的组合框将显示Project.Person或ToString方法显示的任何内容。
但您在DisplayMemberPath中可以设置名称,然后它会显示该人的姓名。
答案 1 :(得分:0)
当您绑定类型X的项集合时,DisplayMemberPath用于设置X的哪个属性将用作显示值。当您在项目类型中有一个很好的字符串值(可以简单地显示为文本)时,它是一种避免使用数据模板的简单机制。在您的示例中,它正在您的项类型中查找名为Value的属性。