2014-10-07 184 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;} 
} 

如果您改變了您的類型綁定,都應該開始正常工作。