2014-10-07 136 views
-1

是否可以将组合框绑定到持有对象的ArrayList?我见过这样的例子很多,但在直接使用一个ArrayList什么将组合框绑定到ArrayList WPF C#

我的对象类具有ID,名称,价值,文字,数据等

obj1 = new Object() 
obj2 = new Object() 
obj3 = new Object() 

ArrayList() list = new ArrayList() 
list.Add(obj1) 
list.Add(obj2) 
list.Add(obj3) 

我这个设置为ComboBox.ItemsSource

combo.ItemSource = list 

我的组合框包含此XAML

DisplayMemberPath="{Binding Path=Id}" 

这似乎工作,但它显示整个对象作为一个“字符串”,而不是只是Id

这是为什么,我该如何解决它?

+1

你认为它被显示为什么?你的实际模型类是什么样的?如果你不告诉它,它只会在你的对象上调用'ToString()'方法,并将对象类型作为一个字符串返回。 – 2014-10-07 20:34:00

+0

您尝试设置DisplayMemberPath并...什么? – Gigi 2014-10-07 20:39:15

+0

布兰德先生已经确定了我所看到的,它正在调用我的.ToString()方法。有没有一种方法可以从对象中显示ID? – chongo2002 2014-10-08 01:43:37

回答

1

DisplayMemberPath意思是包含要显示的属性名称的字符串。

这是告诉组合框,从而使得各项目作为

<ComboBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding DisplayMemberPathValue}" /> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 

例如一个快捷方式,如果设置设置

DisplayMemberPath = "Id" 

然后,它会呈现为

<TextBlock Text="{Binding Id}" /> 

什么您现在正告诉WPF从获得DisplayMemberPath财产,这很可能是无效的,所以你应该只是得到一个绑定错误。

0

您只需要将对象类型更改为复杂类型。

system.object没有id属性。所以它不能渲染。

,如果你的项目源是复合型的,而不是仅仅int或字符串,你需要做的是数组列表:

public class Person 
{ 
public int Id {get;set;} 
public string Name {get;set;} 
} 

如果您改变了您的类型绑定,都应该开始正常工作。