gpt4 book ai didi

c# - WPF:将列表绑定(bind)到列表框

转载 作者:可可西里 更新时间:2023-11-01 08:41:38 26 4
gpt4 key购买 nike

我有一个类:

public class A : INotifyPropertyChanged
{
public List<B> bList { get; set; }

public void AddB(B b)
{
bList.Add(b);
NotifyPropertyChanged("bList");
}

public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}

还有一个绑定(bind)(UserControl 的 DataContext 是 A 的一个实例):

<ListBox ItemsSource="{Binding Path=bList}" />

显示元素,将新对象添加到列表后,列表框不会更新

将列表更改为 ObservableCollection 并删除 NotifyPropertyChanged 处理程序后,一切正常。

为什么列表不起作用?

最佳答案

您的属性(property)必须是 public ,否则绑定(bind)引擎将无法访问它。


编辑:

After changing list to ObservableCollection and removing the NotifyPropertyChanged handler everything works.

这正是 ObservableCollection<T> 的原因类(class)介绍... ObservableCollection<T>工具 INotifyCollectionChanged ,这允许它在添加/删除/替换项目时通知 UI。 List<T>不会触发任何通知,因此 UI 无法检测到列表内容何时发生更改。

您提出 PropertyChanged 的事实事件确实刷新了绑定(bind),但随后它意识到它是 List<T> 的同一个实例和以前一样,所以它重复使用相同的 ICollectionView作为 ItemsSource ,以及 ListBox 的内容没有刷新。

关于c# - WPF:将列表绑定(bind)到列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6058280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com