Ich habe ein seltsames Problem mit meinem WPF-Projekt. Ich habe eine ObservableCollection<T>
an eine ListBox
gebunden. Wenn ich Elemente hinzufüge und entferne, funktioniert die Bindung und die Liste zeigt die korrekten Ergebnisse an.ObservableCollection Remove() feuert nicht auf Sichtbarkeitsbindung
Das Problem, das ich habe, ist, bin ich auch diese Eigenschaft an ein anderes XAML-Steuerelement binden, aber es löst nicht den Konverter, wenn ich ein Element aus der Liste entfernen. Es funktioniert, wenn ich Gegenstände hinzufüge.
Die entsprechende XAML ist
<view:WelcomeView Visibility="{Binding Steps, Converter={StaticResource CollapseIfZero}}"/>
<ListBox ItemsSource="{Binding Steps}" />
Und die Konverter
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var col = value as ICollection;
return col.Count == 0 ? Visibility.Visible : Visibility.Collapsed;
}
ich einen Haltepunkt in dem Konverter habe. Wenn ein neues Element hinzugefügt wird, wird der Haltepunkt getroffen. Wenn ein vorhandenes Objekt entfernt wird, wird der Unterbrechungspunkt nicht getroffen.
Macht WPF etwas Magisches mit dem ListBox
was mir nicht bekannt ist (was zu diesem unerwarteten Verhalten geführt hat)?
machen, so wäre eine weitere Option ist mein WelcomeView zu 'INotifyCollectionChanged' abonnieren haben? – Dave
@Dave, ich denke, ja, es ist möglich, erfordert aber mehr Anstrengungen. Sie müssen sicherstellen, dass sich WelcomeView bei Bedarf abmeldet – ASh
Sie können auch OnPropertyChanged ("Steps") auslösen; manuell nach dem Entfernen eines Elements in Ihrem Viewmodel (als einfache Arbeit). – WPFGermany