WPF привязка не уведомляет об изменениях
У меня есть проблема сортировки / связывания WPF. (Отказ от ответственности: я очень плохо знаком с WPF и связыванием данных, поэтому извиняюсь, если задаю действительно тупой вопрос:-))
Во-первых, у меня есть класс сущности linqToSql Contact
с EntitySet<Booking>
Бронирование недвижимости на нем.
Если я напрямую свяжу это свойство Bookings с 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);
Но это, кажется, не уведомляет текстовое поле комментариев правильно, чтобы оно обновлялось.
Если у кого-то есть решение для сортировки данных до или после его привязки, или другое решение, которое будет работать, это будет высоко ценится.
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);
Hainesy,
Ли Booking
объект реализовать INotifyPropertyChanged
уведомить об изменении в Comments
имущество?
Если нет, вы не можете ожидать TextBox
который связан с Comments
свойство будет автоматически обновляться при Comments
менять
С помощью ObservableCollection
в этом случае вы получите только обновление представления с изменениями, когда Booking
объекты добавляются или удаляются из коллекции
-Rajesh