我有,我重視的ICollectionView爲如何正確綁定(更新)與CollectionViewSource一個DataGrid
XAML一(WPF)DataGrid中:
<DataGrid x:Name="TodoList" ItemsSource="{Binding TodoItemsCollection}" DataContext="{Binding}" />
構造函數(代碼後面)
TodoItemsCollection = CollectionViewSource.GetDefaultView(Storage.TodoItems);
TodoItemsCollection.Filter = TodoItemsFilter;
(Storage.TodoItems是一個ObservableCollection)
TodoItemsCollection物業
private ICollectionView _todoItemsCollection;
public ICollectionView TodoItemsCollection
{
get { return _todoItemsCollection; }
set
{
if (_todoItemsCollection != value)
{
_todoItemsCollection = value;
OnPropertyChanged("TodoItemsCollection");
}
}
}
Storage.TodoItems是的ObservableCollection其中一個跟蹤器添加,編輯和刪除項目。
此更改應立即顯示在DataGrid中。
但是,問題在於所有這些更改都未反映在DataGrid中(即DataGrid未更新)。
例如,如果我撥打TodoItemsCollection.Refresh()
,沒有任何變化。
使用刷新按鈕(僅用於測試目的),我將DataGrid的ItemsSource設置爲null並將其重置(TodoItemsCollection = CollectionViewSource.GetDefaultView(Storage.TodoItems);
)。
本手冊更新顯示新/更改/刪除的項目。
但是,過濾然後不再工作。
我閱讀了大約三十篇博文,但找不到解決我的問題的方法。
通常,撥打Refresh()
或重置ItemsSource
對他們來說效果不錯。
任何建議真的非常感謝!
避免將綁定集合設置爲null,而應使用Clear()。至於你的問題,你可以嘗試OnPropertyChanged(()=> TodoItemsCollection); – liquidsnake786
對不起,我真的不知道你的意思。我將TodoList.ItemsSource設置爲null。而且我無法在TodoItemsCollection上調用Clear()。我該怎麼辦?謝謝! – casaout
我無法在OnPropertyChanged()中使用LambdaFunction。你如何建議OnPropertyChanged() - 方法應該看起來像?謝謝。 – casaout