【发布时间】:2017-03-30 00:13:49
【问题描述】:
我是 WPF 新手,在将数据绑定到简单列表框时遇到问题。我已经在 MainWindow.XAML 中设置了
<ListBox Name="lbxShows" />
然后在后面的代码中,我将 ItemsSource 属性设置为称为 ShowList 的 Show 对象的 ObservableCollection。这实际上是另一个类(Oasis)的属性,OasisInst 是该类的一个实例(在 MainApplication 的构造函数中设置)。
InitializeComponent();
mainApp = new MainApplication();
lbxShows.ItemsSource = mainApp.OasisInst.ShowList;
此时,ShowList 中没有项目,但后来添加了一些项目,它们不会出现在 ListBox 中。
Oasis 类的代码实现了 INotifyPropertyChanged 接口,然后具有从 ShowList 设置器调用的教科书方法。
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
PropertyChanged 是我的 PropertyChangedEventHandler 事件。
当我在调试模式下单步执行时,PropertyChanged 为 null,因此似乎没有任何内容订阅我的事件。鉴于这通常会通过绑定自动发生(我认为?),那么我猜测绑定没有正确设置。
也许仅设置 ItemsSource 属性不足以设置绑定?
【问题讨论】:
-
“Oasis 类的代码实现了 INotifyPropertyChanged 接口”——只要不更改
ShowList属性的值,这无关紧要。如果您确实更改了ShowList属性的值,即创建一个全新的集合并将属性值设置为引用该集合,那么仅仅实现接口是不够的。您需要将属性实际绑定 到目标ItemsSource属性,而不仅仅是设置它。通常这将在 XAML 中完成,但如果您坚持也可以在代码隐藏中完成。 -
您的问题是无法回答的,因为没有好的minimal reproducible example 就不可能确切地知道代码为什么不起作用。请解决您的问题。
标签: c# wpf xaml data-binding listbox