Уведомление WPF DataGrid об изменениях - PullRequest
4 голосов
/ 24 мая 2011

У меня DataGrid привязан к ICollectionView (с включенным фильтром). В частности, я установил view.Filter = SomeFilteringFunction, который использует свойство public DateTime DateFrom { get... set... }, также связанное с DatePicker.

Ну, а теперь, когда я изменяю DatePicker, привязанное свойство DateFrom корректно изменяется, но DataGrid явно не перефильтруется.

Как наиболее правильно уведомить DataGrid об обновлении себя?

Заранее спасибо!

Джеймс

Ответы [ 2 ]

4 голосов
/ 24 мая 2011

Вы не должны привязываться напрямую к ICollectionView, скорее вы привязываетесь к исходной коллекции, а затем применяете фильтр к ICollectionView, возвращенному CollectionViewSource.GetDefaultView.

<DataGrid ItemsSource="{Binding MyCollection}" />
// should raise INotityPropertyChange.PropertyChanged
public ObservableCollection<Entity> MyCollection { get; set; }

MyCollection = new ObservableCollection<Entity>(ctx.EntitySet)); 
ICollectionView view = CollectionViewSource.GetDefaultView(MyCollection);
view.Filter = SomeFilteringFunction;

Тогда, когдазначение изменений DatePicker необходимо указать ICollectionView для обновления.

ICollectionView view = CollectionViewSource.GetDefaultView(MyCollection);
view.Refresh();
0 голосов
/ 24 мая 2011

Вы можете подписаться на событие PropertyChanged (которое, как я полагаю, вы реализовали в классе) и обновить представление в обработчике:

var view = CollectionViewSource.GetDefaultView(Collection);
if (view != null)
{
    view.Refresh();
}

Хотя не уверен, что есть более чистый способ,но я вполне уверен, что вам нужно сделать этот Refresh звонок в одной точке.

...