You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过XAML将ObservableCollection绑定到ListBox的ItemsSource

如何在XAML中绑定ObservableCollection到ListBox

这事儿不难,咱们一步步来实现,替代原来的后台代码赋值:

第一步:把集合改成公共可绑定属性

首先你得把原来的myCollection变量改成公共的属性,这样XAML才能访问到它。因为你用的是ObservableCollection<People>,它本身已经实现了集合变更通知,所以直接定义成自动属性就行。

在你的窗口/页面类里修改代码:

// 原来的IList<People> myCollection改成公共ObservableCollection属性
public ObservableCollection<People> MyCollection { get; set; }

public YourWindowOrPageClass()
{
    InitializeComponent();
    
    // 初始化集合并添加数据
    MyCollection = new ObservableCollection<People>();
    MyCollection.Add(new People { Name = "Jerry", Surname = "Mouse" });
    MyCollection.Add(new People { Name = "Tom", Surname = "Cat" });
    
    // 关键:设置DataContext,让XAML知道去哪里找绑定的属性
    DataContext = this;
}

第二步:在XAML中绑定ListBox的ItemsSource

现在回到XAML,给ListOfNames这个ListBox设置ItemsSource的绑定,指向我们刚才定义的MyCollection属性:

<ListBox x:Name="ListOfNames" ItemsSource="{Binding MyCollection}">
    <!-- 可选:自定义每个列表项的显示样式,默认会显示People对象的ToString()结果 -->
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <Run Text="{Binding Name}"/>
                <Run Text=" "/>
                <Run Text="{Binding Surname}"/>
            </TextBlock>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

补充说明

  • {Binding MyCollection}会自动在当前的DataContext里查找名为MyCollection的属性,所以我们之前设置DataContext = this是关键。
  • 因为ObservableCollection实现了INotifyCollectionChanged,所以后续你对集合做增删操作时,ListBox会自动更新UI,不用手动刷新。
  • 如果是大型项目,更推荐用MVVM模式:把MyCollection放在专门的ViewModel类里,然后把ViewModel实例设为窗口的DataContext,这样能更好地分离UI和业务逻辑。

内容的提问来源于stack exchange,提问作者user3684516

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:41:58