Desidero filtrare una ObservableCollection su un sottoinsieme basato sul tipo (tipo AddPoint) e voglio che venga ordinato in ordine crescente senza duplicati. La mia classe base è ModelBase, con sottoclassi AddPoint, Time, Repeat, ecc. La ObservableCollection MotionSequenceCollection sarà riempita con quei tipi in qualsiasi ordine e alcuni saranno duplicati.Associazione WPF filtrata ObservableCollection ICollectionView a Combobox
Ho provato diverse volte e mostrato di seguito nella proprietà ICollectionView che ho "estratto" da: Bind subset of collection.
COLLECTION osservabile
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;
}
}
Onestamente, sto lottando in modo massiccio con questo. Inizialmente sono andato in @ makc's way w/the CollectionViewSource_FIlter e ho trovato alcuni esempi per aiutare, ma il problema consisteva nel rendere la lista distinta() - era 2 giorni fa e la mia testa era nebbiosa. Il filtro è simile al seguente: – FloppyDisk
Ho bisogno di rivedere il mio commento. Ho fatto funzionare la tua soluzione e ho imparato molto su collectionviewsource. Il problema è che se ci sono duplicati e solo uno mostra nella combobox (vista filtrata), quando ne cambio uno nella raccolta, non si aggiorna aggiungendo il nuovo record modificato. Se ce n'è solo uno, quindi gli aggiornamenti come previsto dopo propertychanged. Questo è il motivo per cui ho seguito un percorso di linq dopo, ma si è rivelato essere disastroso. – FloppyDisk
@FloppyDisk Sono molto contento che non hai appena copiato il passato, ma ho letto e imparato :), non sono sicuro di aver capito completamente il problema, provando a creare un piccolo esempio stand alone e penso che valga la pena una nuova domanda ... – makc