2

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

私の問題は、メインのコレクションビューにフィルター述語をアタッチしたのですが、そこRefreshから呼び出すと、フィルターにまったく移動しません。フィルタ述語から例外をスローしようとしたので、デバッガがそのコードに到達できない場合でも、コードが到着したことがわかりますが、例外はスローされませんでした。

私がRefreshと呼んでいて、フィルター述語に移動しない理由は何でしょうか。つまり、ビューが再作成されていないということですか。

4

1 に答える 1

3

うまくいく回避策を見つけましたが、私はそれが好きではありません。

私がやっていることは、Filterプロパティを再度リセットすることです、それは仕事をします。
私はReflectorを少し歩き回って、何が欠けているのかを見つけようとしましたが、癖が何であるかを明確にすることに大きな成功はありませんでした。

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();
}

アップデート

私はもっ​​と簡単な解決策を見つけました。

最初のクエリICollectionViewを単純なものに変更してIEnumerable<Product>、Linqクエリを返しました。

更新が機能しなかった理由はわかりませんが、他のコレクションビュー(UIにバインドされている)では更新が機能するため、のlinqフィルターがIEnumerable<Product>機能します。

于 2011-11-13T07:46:58.610 に答える