グリッド ビューでアイテムを編集しようとすると、「'EditItem' はこのビューでは許可されていません」という例外が発生します。これは、データ グリッドを LINQ クエリにバインドしているためです。私の質問は、アイテムの元のコレクションをフィルター処理する方法ですか? 別の ObservableCollection (または IList を実装する他のもの) を作成し、フィルター処理されたアイテムをそこにコピーする必要がありますか?
編集: ObservableCollection へのデータの複製が機能することを知っています。私の質問は次のとおりです。元のコレクションが与えられた場合、コレクションをフィルタリングおよび/または順序付けしてグリッド ビュー内で編集可能にするためのメモリ効率の高い (メモリの複雑さが一定の) 方法はありますか?
private readonly ObservableCollection tasks = new ObservableCollection();
public IEnumerable OrderedTasks
{
get
{
return this.tasks.Where(t => !t.Complete);
}
}
<DataGrid ItemsSource="{Binding OrderedTasks}" />