日期:2014-05-17  浏览次数:20781 次

WPF,ListBox的绑定为什么没有变化

List<int> list = new List<int>() { 0, 1, 2,3, 4 };
private void Button1_Click(object sender, RoutedEventArgs e)
{            
    listbox1.ItemsSource = list;
}
private void Button2_Click(object sender, RoutedEventArgs e)
{
    list.Remove(0);
    listbox1.ItemsSource = list;
}


点击button1,listbox1正常显示了各项。单击button2之后,list项移除了,并重新指定了ItemsSource ,为什么项没有变呢?这就是传说中的绑定?

------解决方案--------------------
因为ItemsSource没有改变,list的引用地址还是原来那个,只是内部的元素变化了。你可以先设置ItemsSource = null后,再设置ItemsSource = list。你也可以使用WPF的中推荐的ObservableCollection<T>替代List<T>,那个ObservableCollection<T>内部元素稍微改变,就会体现到外部控件上的。
------解决方案--------------------
用ObservableCollection<T>作为数据源,ObservableCollection实现了 INotifyCollectionChanged 接口,此接口公开 CollectionChanged 事件,只要基础集合发生更改,都应该引发该事件,通知界面。