ObservableCollectionをタイプ(AddPoint型)に基づいてサブセットにフィルタリングし、重複なしで昇順に欲しいです。私の基本クラスはModelBase、サブクラスAddPoint、Time、Repeatなどです... ObservableCollection MotionSequenceCollectionはこれらの型で任意の順序で塗りつぶされ、重複するものもあります。WPFバインディングフィルタリングObservableCollection ICollectionView to Combobox
私はいくつかの異なる時間を試して、私が '引っ張った' ICollectionViewプロパティに以下のように表示しました:Bind subset of collection。種類別
監視可能なコレクション
private ObservableCollection<ModelBase> _motionSequenceCollection =
new ObservableCollection<ModelBase>();
public ObservableCollection<ModelBase> MotionSequenceCollection
{
get
{
return _motionSequenceCollection;
}
set
{
if (_motionSequenceCollection == value)
{
return;
}
var oldValue = _motionSequenceCollection;
_motionSequenceCollection = value;
// Update bindings, no broadcast
RaisePropertyChanged();
}
}
public ICollectionView Location
{
get
{
var location = CollectionViewSource.GetDefaultView(_motionSequenceCollection);
//DOES NOT WORK. PROBLEM: GetType() creates type of system.type() and AddPoint, which don't work. Need a cast, or something??
// found at https://stackoverflow.com/questions/9621393/bind-subset-of-collection The problem is that there is an error:
// Cannot apply operator '==' to operands of type 'System.Type' and 'MotionSeq.Model.AddPoint',
// candidates are:
// bool ==(System.Reflection.MemberInfo, System.Reflection.memberInfo) (in class MemberInfo)
// bool ==(System.type, System.Type) (in class Type)
//location.Filter = p => (p as ModelBase).GetType() == AddPoint;
//DOES NOT WORK. PROBLEM: Affects the main collection and won't let TIME type added.
//location.Filter = o1 => (o1 is AddPoint);
//DOES NOT WORK. PROBLEM: Sorts fine, but also sorts MotionSequenceCollection!! What up w/ that!?
//location.SortDescriptions.Add(new SortDescription("AddPointClassName", ListSortDirection.Ascending));
//DOES NOT WORK. PROBLEM: MotionSequenceCollection does not update.
//location.Filter = p => (p as ModelBase) == AddPoint;
//DOES NOT WORK. PROBLEM: Source is not instantiated(?) and exmaple from stackoverflow and not sure how that got there in the first place.
//source.Filter = p => (p as ModelBase).GetType() == "AddPoint";
//return source;
return location;
}
}
正直なところ、私はこれで大量に苦労しています。私はもともとCollectionViewSource_FIlterを使って@ makcの方法に行きましたが、いくつかの例がありましたが、問題はリストを区別することでした - それは2日前であり、頭が曇っています。フィルタは次のようなものです: – FloppyDisk
私のコメントを修正する必要があります。私はあなたのソリューションを働かせて、collectionviewsourceについて多くのことを学びました。問題は、重複があり、コンボボックス(フィルタリングされたビュー)に1つしか表示されない場合、コレクション内で編集すると、編集されたレコード。唯一のものがあれば、それはpropertychangedの後で期待通りに更新されます。だから私は後にlinqのパスを下ったが、それは悲惨であることが判明している。 – FloppyDisk
@FloppyDisk私はあなたがちょうど過去のコピーをしなかったことを非常にうれしく思っていますが、読んで学びました:)私は問題を完全に理解しているとは確信していません。小さなスタンドアロンの例を作成してみてください。 – makc