ObservableCollection을 유형 (AddPoint 유형)을 기반으로 하위 집합으로 필터링하고 중복없이 오름차순으로 정렬하려고합니다. 내 기본 클래스는 ModelBase, 서브 클래스 AddPoint, 시간, 반복 등 ... ObservableCollection MotionSequenceCollection은 임의의 순서로 해당 유형으로 채워지고 일부는 중복됩니다.WPF 바인딩 필터링 ObservableCollection ICollectionView to Combobox
나는 여러 번 시도해 보았고 아래에서 ICollectionView 속성에 표시했습니다. 그 위치는 'from'from Bind subset of collection입니다.
관찰 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;
}
}
솔직히, 나는 이것에 다량으로 고투하고있다. 나는 원래 @ makc의 방법으로/CollectionViewSource_FIlter를 보았고 도움이 될만한 몇 가지 예제를 발견했다. 그러나 문제는 목록을 구별 짓는 것과 관련이 있었다. - 그것은 2 일 전이었고 내 머리는 안개가 낀다. 필터는 다음과 같습니다 : – FloppyDisk
내 의견을 수정해야합니다. 나는 당신의 솔루션을 작동시키고 collectionviewsource에 대해 많은 것을 배웠다. 문제는 중복이 있고 콤보 상자 (필터링 된 뷰)에 하나만 표시된다면 컬렉션에서 편집 할 때 새로 추가하여 업데이트하지 않는다는 것이다 편집 된 기록. 하나만 있으면 속성 변경 후 예상대로 업데이트됩니다. 그 이유는 내가 linq 경로를 따라 갔지만, 그 재앙이 입증되었습니다. – FloppyDisk
@FloppyDisk 나는 당신이 단지 과거를 복사하지 않고 읽었고 배웠다는 것을 매우 기쁘게 생각합니다. :) 나는 작은 문제를 완전히 이해하려고 노력하고 있으며, 새로운 질문을할만한 가치가 있다고 생각합니다. – makc