0

オブジェクトのリストをフィルタリングするために、次のプロパティを定義しました。

 private ICollectionView _view;
    public ICollectionView View
    {
        get
        {
            return _view;
        }
        set
        {
            _view = value;
            OnPropertyChanged("View");
        }
    }

そして私のフィルター:

  item.View = CollectionViewSource.GetDefaultView(item.myList);

 item.View.Filter = delegate(object o)
 {

           if (myCondition)
      {
         return true;
      }

}

フィルターは正常に機能しますが、ICollectionView はインターフェイスであるため、アイテムを操作できません。この方法で呼び出すと、次のようになります。

element1 = item.View[0].SomeProperty;

私は受け取る

Cannot apply indexing with [] to an expression of type 'System.ComponentModel.ICollectionView'

最初はインターフェイスとしてではなく設定しようとしましたViewが、後でフィルターを機能させることができませんでした。そうしてキャストしようとしています:

item.View = (ICollectionView)CollectionViewSource.GetDefaultView(item.myList);

私も良い結果をもたらしていません。

フィルタリングするだけでなく(私の場合はComboBoxにアイテムを表示します)、それらを操作するにはどうすればよいですか...私の目的は、ComboBoxに残っているすべての要素に対してforeachループを作成できるようにすることです。これは可能ですか?

4

2 に答える 2

1

ビューをリストとは別に保存します。以下の略記では、適切な INotifyPropertyChanged などを記入してください。

List<SomeType> list;
ICollectionView view;

view = list as ICollectionView;
view.Filter = obj => obj.someprop == somevalue;

list[ 10 ].someprop = somevalue
于 2013-06-22T21:27:24.327 に答える