读书人

WPF请教ListBox的Binding是否为空呢

发布时间: 2013-09-06 10:17:17 作者: rapoo

WPF,请问ListBox的Binding是否为空呢?
设置了ListBox的绑定:
listbox1.ItemsSource = list;
在这种情况下,与listbox1的ItemsSource属性关联的Binding好像是null的。
那如何设置listbox1的SourceUpdated事件呢?因为要响应SourceUpdated事件,要求Binding的NotifyOnSourceUpdated属性值设置为true。可是Binding为null啊。

该怎么设置呢?
[解决办法]
你确定你绑定的东西是实现了INotifyPropertyChanged的类吗?或者你绑定的List有没有搞定 INotifyCollectionChanged接口呢?
[解决办法]

引用:
Quote: 引用:

你确定你绑定的东西是实现了INotifyPropertyChanged的类吗?或者你绑定的List有没有搞定 INotifyCollectionChanged接口呢?

是的

从你的问题来看,要设置SourceUpdated就直接绑定一个函数到上面就行了啊。另外没看到代码完全不知道你是神马问题。。。
[解决办法]
listbox1.ItemsSource = list; 这是绑定吗 另外List集合没有实现变更通知 可以用ObservervationCollection(没有提示器 拼不全呀) 集合 在对集合进行 增删会出发变更通知事件 从而会自动更新 不知道回答的是不是你所想问的。
综上 你的问题可能是1:listbox1.ItemsSource = list 并没用到Binding语法 只是一般赋值
2: 绑定到List集合没有实现InotifyPropertyChange/InotifyCollectionChange接口 不会自动更新
[解决办法]
引用:
Quote: 引用:

listbox1.ItemsSource = list; 这是绑定吗 另外List集合没有实现变更通知 可以用ObservervationCollection(没有提示器 拼不全呀) 集合 在对集合进行 增删会出发变更通知事件 从而会自动更新 不知道回答的是不是你所想问的。
综上 你的问题可能是1:listbox1.ItemsSource = list 并没用到Binding语法 只是一般赋值
2: 绑定到List集合没有实现InotifyPropertyChange/InotifyCollectionChange接口 不会自动更新

listbox1.ItemsSource = list;
这不是绑定吗 ?我觉得应该是吧


单纯的绑定是没有意义的,比如以下代码:
List<String> strList = new List<String>();
listBox1.ItemsSource = strList;

因为你绑定的strList并没有实现 INotifyCollectionChanged 接口。
而以下写法是可以使用的:
ObservableCollection<String> strList = new ObservableCollection<String>();


listBox1.ItemsSource = list;

这个问题我以前也碰过,反正要么是没有用ObservableCollection,要么是泛类里的那个类没有实现INotifyPropertyChanged,再或者你实现了INotifyPropertyChanged但是没有调用OnPropertyChanged事件。

对于实现了INotifyPropertyChanged但是没有实现INotifyCollectionChanged接口:修改的内容可以正确反应到目标ListBox中,但是对记录的添加和删除操作没有反应。

对于实现了INotifyCollectionChanged接口但是没有实现INotifyPropertyChanged接口:添加和删除操作可以正确反应,但是对已经存在于列表中的记录的修改没有反应。

对于两者都实现的情况:即可以反应新记录的添加,旧记录的删除,也可以修改现有的记录。

如果实现了INotifyPropertyChanged接口,但是没有在属性修改时调用OnPropertyChanged方法,效果等同于没有实现INotifyPropertyChanged接口。
[解决办法]
补充一下,ObservableCollection里有实现INotifyCollectionChanged接口。上文所述的三种情况应该是:

讨论泛类:Colletion<T>中
Collection有没有实现INotifyCollectionChanged,以及T中有没有实现INotifyPropertyChanged。

对于Collection有没有实现INotifyPropertyChanged接口没有限制,虽然说ObservableCollection是实现了,但是我试验了一下,如果自己写一个不实现的也可以用。但是如果这个类不实现INotifyPropertyChanged接口的话,类里面非列表的属性就无法绑定了。
[解决办法]

引用:
Quote: 引用:

listbox1.ItemsSource = list; 这是绑定吗 另外List集合没有实现变更通知 可以用ObservervationCollection(没有提示器 拼不全呀) 集合 在对集合进行 增删会出发变更通知事件 从而会自动更新 不知道回答的是不是你所想问的。
综上 你的问题可能是1:listbox1.ItemsSource = list 并没用到Binding语法 只是一般赋值
2: 绑定到List集合没有实现InotifyPropertyChange/InotifyCollectionChange接口 不会自动更新

listbox1.ItemsSource = list;
这不是绑定吗 ?我觉得应该是吧

数据绑定需要使用Binging吧 在XAML里可以以ItemsSource={Binding list} 或是在后台代码中声明

读书人网 >C#

热点推荐