C'è un modo per aggiornare automaticamente un filtro su un ICollectionView
senza dover chiamare Refresh()
quando è stata apportata una modifica rilevante?Aggiorna automaticamente il filtro ICollectionView
Ho il seguente:
[Notify]
public ICollectionView Workers { get; set; }
Il [Notifica] attributo in questa proprietà implementa solo INotifyPropertyChanged
, ma non sembra essere di fare qualsiasi cosa in questa situazione.
Workers = new CollectionViewSource { Source = DataManager.Data.Workers }.View;
Workers.Filter = w =>
{
Worker worker = w as Worker;
if (w == null)
return false;
return worker.Employer == this;
};
In XAML:
<TextBlock x:Name="WorkersTextBlock"
DataContext="{Binding PlayerGuild}"
FontFamily="Pericles"
Text="{Binding Workers.Count,
StringFormat=Workers : {0},
FallbackValue=Workers : 99}" />
Aggiornamento: Sembra utilizzando ICollectionView
sta per essere necessario per me, quindi mi piacerebbe rivisitare questo argomento. Aggiungo una generosità a questa domanda, il cui destinatario sarà qualsiasi persona in grado di fornire alcune informazioni su come implementare un 'hands-off' ICollectionView
che non necessita di essere aggiornato manualmente. A questo punto sono aperto a qualsiasi idea.
Beh, considerando che l'attributo non è BCL, non è sorprendente che non copre questo caso angolo. In realtà, non c'è nulla in WPF che copra questo caso, quindi dovrai farlo tu stesso. La proprietà filter non è un DP, e anche lo era, nulla nel filtro attiverebbe un evento di aggiornamento. Sembra che dovrai attivarlo manualmente. Forse nel corpo del filtro? Puoi fare riferimento personale tramite la chiusura. Guardando il lambda, dovresti scaricare la chiamata in Refresh su Dispatcher, in modo che si avvii dopo l'applicazione del filtro. Ergh, e aggiungi un blocco bool "aggiornamento brb" – Will
(non più caratteri) sembra che non ci sia alcun modo per aggirarlo, eccetto forse per l'estensione del CVS e l'aggiornamento durante un filtro, con controlli per essere sicuro di non attivarlo continuamente un aggiornamento. Ha senso perché non è BCL, giusto? Il filtro attiva un aggiornamento, che attiva un filtro e così via ... – Will
Grazie per la spiegazione. Sembra che lo farò manualmente. –