Sammlung Abhängigkeit Eigenschaften
Habe ich ein benutzerdefiniertes Steuerelement, das eine DependencyProperty
Typ ObservableCollection
gebunden ist, um eine observableCollection
:
<MyControl MyCollectionProperty = {Binding MyObservableCollection} ...
Problem ist das hinzufügen zu MyObservableCollection
nicht aktualisiert MyCollectionProperty
.
Muss ich komplett ersetzen, die MyObservableCollection
zu machen, arbeiten z.B.
MyObservableCollection = null;
MyObservableCollection = new ObservableCollection(){...}
Gibt es eine bessere Möglichkeit, damit umzugehen?
EDIT:
public ObservableCollection<string> Columns
{
get { return (ObservableCollection<string>)GetValue(ColumnsProperty); }
set { SetValue(ColumnsProperty, value); }
}
public static readonly DependencyProperty ColumnsProperty =
DependencyProperty.Register("Columns", typeof(ObservableCollection<string>), typeof(MyControl),
new PropertyMetadata(new ObservableCollection<string>(), OnChanged));
- Würden Sie post von der definition der Abhängigkeit-Eigenschaft? Könnte etwas aus dort...
- Ist Ihre "MyControl" monitoring PropertyChanged-oder CollectionChanged und sind Sie die überwachung PropertyChanged auf die Objekte in Ihrem beobachtbaren Sammlung?
- ja, es ist ein Rückruf in der Definition und den handler für die CollectionChanged nie gefeuert wird. Ich sehe nicht, wo das hören für PropertyChanged auf die Elemente ist relevant, da wir reden über das hinzufügen.
- Kannst du die Methode onChanged-Ereignisse? Btw es ist nicht eine gute Idee, um eine Voreinstellung für Ihre dp. Jede Instanz des Steuerelements wird auf die gleiche collection-Instanz standardmäßig.
- Ah.. guter Punkt, um den default-Wert. Ich könnte den handler aber es ist irgendwie irrelevant, weil Sie nie aufgerufen wird.
- Ähnliches problem gefragt und hier beantwortet stackoverflow.com/questions/4362278/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unten ist ein lauffähiges Beispiel, das kann helfen.
In diesem Beispiel wird die Methode onChanged-Ereignisse wird sofort aufgerufen, wenn die Schaltfläche Hinzufügen geklickt wird "Geändert" wird in die Konsole geschrieben.
Die Kontrolle
Dem Fenster
Fenster Code Hinter
new PropertyMetadata(new ObservableCollection<string>()
bei der Registrierung von abhängigkeitseigenschaften. Siehe hier für die ErklärungZusätzlich zu dem, was grantz beantwortet hat, würde ich vorschlagen, zu erklären, dass die Eigenschaft mit dem Typ
IEnumerable<string>
und prüfen zur Laufzeit, wenn das collection-Objekt implementiert die, INotifyCollectionChanged
- Schnittstelle. Dies bietet eine höhere Flexibilität als um die konkrete collection-Implementierung kann verwendet werden als-Eigenschaft-Wert. Ein Benutzer kann dann entscheiden, haben Ihre eigenen spezialisierten Implementierung eines beobachtbaren Sammlung.Beachten Sie auch, dass in der
ColumnsPropertyChanged
Rückruf derCollectionChanged
event-handler angeschlossen ist, um die neue Kollektion, aber auch entfernt von der alten.