WPF привязка не уведомляет об изменениях - PullRequest
1 голос
/ 29 мая 2009

У меня проблема с сортировкой / привязкой WPF. (Отказ от ответственности: я очень плохо знаком с WPF и привязкой данных, поэтому извиняюсь, если задаю действительно тупой вопрос: -))

Во-первых, у меня есть класс сущности linqToSql Contact с EntitySet<Booking> свойством Bookings.

Если я напрямую связываю это свойство 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 ]

2 голосов
/ 29 мая 2009

Вы должны связать с 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);
0 голосов
/ 05 июня 2009

Hainesy,

Реализует ли объект Booking INotifyPropertyChanged для уведомления об изменении свойства Comments?

Если нет, вы не можете ожидать, что TextBox, привязанный к свойству Comments, будет обновляться автоматически при Comments изменении

Использование ObservableCollection в этом случае поможет вам обновить представление только с изменениями, когда Booking объекты добавляются или удаляются из коллекции

-Rajesh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...