如何通过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
相关产品推荐
相关产品推荐

