将组合框绑定到ArrayList WPF C#

本文关键字:ArrayList WPF 绑定 组合 | 更新日期: 2023-09-27 18:25:48

是否可以将组合框绑定到保存对象的ArrayList?我见过很多例子,但没有一个是直接使用ArrayList 的

My Object类具有属性Id、Name、Value、Text、Data等。

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

为什么会这样,我该如何修复?

将组合框绑定到ArrayList WPF C#

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

这是告诉组合框将每个项目渲染为的快捷方式

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

例如,如果设置

DisplayMemberPath = "Id"

然后它将呈现为

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

您现在所做的是告诉WPF从ComboBox.DataContext.Id获取DisplayMemberPath属性,该属性很可能是无效的,因此您应该只得到一个绑定错误。

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

system.object没有id属性。所以它无法呈现。

如果你的项目源是复杂类型的数组列表,而不是int或string,你需要做的是:

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

如果您更改了类型,那么所有绑定都应该开始正常工作。