1

我有一个 WPF 排序/绑定问题。(免责声明:我对 WPF 和数据绑定非常陌生,所以如果我问一个非常愚蠢的问题,我深表歉意 :-))

首先,我有一个Contact带有EntitySet<Booking>属性 Bookings 的 linqToSql 实体类。

如果我直接将此 Bookings 属性绑定到 a 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 进行排序的方法(请参阅这篇文章),因此我尝试将其绑定到 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);

但这似乎并没有正确通知评论文本框以使其更新。

如果有人有一个解决方案,可以在数据绑定之前或之后对数据进行排序,或者另一种可行的解决方案,将不胜感激。

4

2 回答 2

2

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

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);
于 2009-05-29T15:53:52.640 回答
0

海尼斯,

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

如果没有,您不能期望TextBox哪个绑定到属性会在更改Comments时自动更新Comments

在这种情况下使用ObservableCollection只会让您在Booking从集合中添加或删除对象时使用更改更新视图的好处

-拉杰什

于 2009-06-05T05:50:25.313 回答