我有一个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);
但是这似乎没有正确通知评论文本框,以便更新。
如果有人有解决方案在数据绑定之前或之后对数据进行排序,或者另一种解决方案可以使用,那将非常感激。
答案 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