2013-06-14 6 views
5

ho una casella di riepilogo che si sta filtro in questo modo:Mantenere SelectedItem durante filtro di CollectionViewSource

var view = CollectionViewSource.GetDefaultView(FilterSource); 
view.Filter = FilterCode; 

Sto funzionando in un problema in cui il SelectedItem è perdersi quando il filtro è usato con il codice viewmodel in questo modo:

VM 
{ 
    public ObservableCollection<Model> Items{get;set;} 
    public Model SelectedItem 
    { 
     get{return _selectedItem;} 
     set{_selectedItem = value; NotifyPropertyChanged();} 
    } 
} 

Quando viene applicato il filtro, il SelectedItem è impostato null. Tuttavia, voglio mantenere quell'elemento selezionato a meno che l'utente non faccia effettivamente clic. Se il filtro viene rimosso, l'elemento selezionato dovrebbe essere ancora selezionato. Il modello ha una proprietà IsSelected e ho cercato di pensare ai modi per eseguire una query per la proprietà IsSelected. Tuttavia, allora il punto di vista di vincolante non avrebbe funzionato il modo in cui mi aspetto .... o almeno io sto andando in tondo pensando che non può

+0

se la raccolta ha qualche tipo di chiave primaria è possibile salvare questo ID prima del filtraggio e provare a impostare la selecteditem con questo ID dopo il filtraggio – blindmeis

risposta

0

Il mio unico modo di realizzare una correzione qui è la seguente nell'evento SelectionChanged:

if (e.AddedItems.Count == 0 && e.RemovedItems.Count >= 0) 
    SpecialtyListBox.SelectedItem = e.RemovedItems[0]; 

Ma questo sembra davvero hacky e impone che ci sia sempre una voce selezionata una volta selezionata quella iniziale. In questo caso, potrebbe funzionare, ma mi piacerebbe ancora vedere se qualcuno ha una soluzione migliore?

0

Ho avuto un problema simile, in cui le caselle di riepilogo erano visualizzate come viste a schede. Ho risolto il problema creando un convertitore per produrre un flag booleano per "isActive" e assegnandolo a CollectionViewSource.IsLiveFilteringRequested. Ciò ha impedito alle caselle di riepilogo non attive di aggiornare l'elemento selezionato.

0

È possibile risolvere questo problema creando un filtro che aggiunge sempre l'elemento selezionato corrente agli elementi filtrati. Se questo non può essere fatto direttamente, tieni semplicemente l'oggetto selezionato in una variabile separata.