Gibt es eine Möglichkeit, einen Filter auf einer ICollectionView
automatisch zu aktualisieren, ohne Refresh()
aufrufen zu müssen, wenn eine relevante Änderung vorgenommen wurde?ICollectionView-Filter automatisch aktualisieren
Ich habe folgendes:
[Notify]
public ICollectionView Workers { get; set; }
Die [Benachrichtigen] Attribut in dieser Eigenschaft nur implementiert INotifyPropertyChanged
aber es scheint nicht in dieser Situation etwas zu tun zu sein.
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}" />
Update: Es sieht aus wie mit ICollectionView
für mich notwendig sein wird, so möchte ich dieses Thema zu überdenken. Ich füge ein Kopfgeld zu dieser Frage hinzu, deren Empfänger jede Person sein wird, die einen Einblick geben kann, wie man einen "Hands-Off" ICollectionView
implementiert, der nicht manuell aktualisiert werden muss. An dieser Stelle bin ich für alle Ideen offen.
Nun, ist dieses Attribut nicht unter Berücksichtigung BCL, ist es nicht verwunderlich, dass es nicht diese Ecke Fall abdeckt. Tatsächlich gibt es in WPF nichts, was diesen Fall abdeckt, also müssen Sie es selbst tun. Die Filtereigenschaft ist kein DP und selbst wenn dies der Fall wäre, würde nichts im Filter ein Aktualisierungsereignis auslösen. Sieht so aus, als müssten Sie es manuell auslösen. Vielleicht im Körper des Filters? Sie können sich über den Verschluss selbst beziehen. Wenn Sie sich das Lambda ansehen, müssen Sie den Aufruf von Aktualisieren an den Dispatcher auslagern, damit er ausgeführt wird, nachdem der Filter angewendet wurde. Ergh, und fügen Sie einen bool "brb update" Block – Will
(keine Zeichen mehr) sieht aus als gäbe es keinen Weg, außer vielleicht CVS und Updates während eines Filters zu erweitern, mit Überprüfungen, um sicherzustellen, dass Sie nicht kontinuierlich auslösen ein Update. Macht Sinn, warum das nicht BCL ist, oder? Filter löst ein Update aus, das einen Filter auslöst, und so weiter und so weiter ... – Will
Danke für die Erklärung. Es sieht so aus als würde ich das manuell machen. –