WPF绑定不通知更改

时间:2009-05-29 14:29:35

标签: wpf data-binding sorting entityset

我有一个WPF排序/绑定问题。 (免责声明:我是WPF和数据绑定的新手,如果我问一个非常愚蠢的问题,请道歉: - )

首先,我有一个linqToSql实体类Contact,上面有EntitySet<Booking>属性预订。

如果我直接将此预订属性绑定到ListView,则应用程序似乎会正确通知ListView中所选项目的更改,以便{Binding Path=Bookings/Comments}正确更新文本框

// This code works, but Bookings is unsorted  
var binding = new Binding();
binding.Source = contact.Bookings;
bookings.SetBinding(ItemsControl.ItemsSourceProperty, binding);

但是,由于我似乎无法找到对EntitySet进行排序的方法(请参阅this post),我试图将其绑定到Observable集合,例如:

// This code doesn't notify of selected item changes in the ListView
var binding = new Binding();
binding.Source = new ObservableCollection<Booking>(contact.Bookings.OrderByDescending(b => b.TravelDate).ToList());
bookings.SetBinding(ItemsControl.ItemsSourceProperty, binding);

但是这似乎没有正确通知评论文本框,以便更新。

如果有人有解决方案在数据绑定之前或之后对数据进行排序,或者另一种解决方案可以使用,那将非常感激。

2 个答案:

答案 0 :(得分:2)

您应该绑定到CollectionView而不是集合本身。这将允许您指定所需的任何排序标准。例如:

var collectionView = new ListCollectionView(contact.Bookings);
collectionView.SortDescriptions.Add(new SortDescription("TravelDate", ListSortDirection.Ascending));
var binding = new Binding();
binding.Source = collectionView;
bookings.SetBinding(ItemsControl.ItemsSourceProperty, binding);

答案 1 :(得分:0)

Hainesy,

Booking对象是否实现INotifyPropertyChanged来通知Comments属性中的更改?

如果没有,那么当TextBox更改

时,您不能指望Comments绑定Comments属性的ObservableCollection自动更新

在这种情况下使用Booking只会让您在从集合中添加或删除{{1}}个对象时更改视图并进行更改

-Rajesh