ICollectionView.Refreshはコレクションを再解析しません

私は3つのカスケード ICollectionView
を、他のビューモデルに依存するビューモデルに持っています。
最初のものは、ビューのコントロールにバインドされていませんが、マスターディテールとしてユーザーに表示される2つのキーフィルターのキーフィルターとして使用されます。

私の問題は、メインのコレクションビューにフィルタ述語を添付しましたが、 Refresh
を呼び出すと、フィルタにはまったく行きません。私は、フィルタ述語から例外をスローしてみました。そのため、デバッガがそのコードに到達できない場合でも、それはまだ到着すると見えますが、例外はスローされませんでした。

私がリフレッシュを呼び出す理由は何かであり、それはフィルタ述語に私を連れてこない –
それはビューを再作成していないことを意味する?

ベストアンサー

私は動作する回避策を見つけましたが、私はそれが気に入らないのです。

私がやっているのは、 Filter プロパティを再度リセットすることです。
私は何が欠けているのかを見つけようとしている反射板の中をちょっと見回しましたが、何が変わったのかを明確にする大きな成功はありませんでした。

private ICollectionView _Products;
public ICollectionView Products
{
  get
  {
    if (_Products == null)
    {
      _Products = 
         CollectionViewSource.GetDefaultView(ProductsLibrary.SupportedProducts);
      _Products.Filter = product => FilterProduct((Product)product);
    }

    return _Products;
  }
}
private bool FilterProduct(Product product)
{
  /**********************/
}

////////////////////

private void Search()
{
  //Products.Refresh();
  Products.Filter = product => FilterProduct((Product)product);
  Categories.Refresh();
  CategoryProducts.Refresh();
}

更新

私ははるかに簡単な解決策を見つけました。

I changed the first ICollectionView to a simple
IEnumerable, returning a Linq query.

Without finding out why the refresh didn’t work, however on the
other collection views (that are bound to the UI) the refresh does
work, and so, the linq filter of the IEnumerable does
the job.

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です