Wenn mit Dependency Eigenschaften
Ich denke manchmal, dass ich vielleicht mit Hilfe von Dependency Properties unnötig. Wann muss ich ihn verwenden? Wenn ich eine Eigenschaft, die dependes auf andere Eigenschaften? Sagen, dass ich eine Color
Eigenschaft, die ich will, dass es abhängig von den Eigenschaften Farbton, Sättigung, Leuchtkraft, verwende ich eine Abhängigkeitseigenschaft? Oder was muss ich verwenden? Ich kontrolliert, das ist gebunden zu Color
zu aktualisieren, wenn die Eigenschaften Farbton, Sättigung, Leuchtkraft verändert werden.
für jetzt, was ich Tat, war
public byte Hue {
get { return _hue; }
set
{
if (_hue == value)
return;
_hue = value;
NotifyPropertyChanged("Hue");
NotifyPropertyChanged("Color"); //to update controls bound to color
}
}
Aber ich denke, das ist nicht der richtige Weg, Dinge zu tun? Wenn ich noch mehr Eigenschaften, die Einfluss auf Farbe habe, werde ich in 1 zusätzlicher line-in all diesen Eigenschaften?
- Ich glaube nicht, dass das unvernünftig overhead in Bezug auf code, und es ist sicherlich leichter als das hinzufügen einer DependencyProperty.
- wenn Sie die hsl-Farbe-route. Ich würde es tun, so brauche ich mich nicht zu calc so oft. Zum Beispiel, store aus H,S und L zu allen Zeiten, und nur konvertieren, wenn Sie zu Synchronisierung. Dies verbessert die Geschwindigkeit enorm.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nur verwenden, ein
DependencyProperty
wenn Sie wollen in der Lage sein zu binden seine Wert, um etwas über XAML, z.B.Update: wie erwähnt von Ian unten Abhängigkeit Eigenschaften sind auch erforderlich, wenn Sie möchten in der Lage sein zu animieren, Ihre Immobilie oder legen Sie es über einen Stil
Wenn Sie nicht arbeiten müssen, auf diese Weise, dann ist es unnötig. z.B. Wenn Sie nur wollen, um in der Lage sein, um den Wert um eine Konstante durch XAML (wie unten), funktioniert dies ohne Verwendung eines
DependencyProperty
Ebenso, wenn Sie binden möchten zu den Wert einer Eigenschaft auf (zum Beispiel), die Ihre view-Modell:
dann müssen Sie nicht brauchen, um eine
DependencyProperty
. Vorausgesetzt, Sie implementierenINotifyPropertyChanged
dann dieText
wird noch aktualisiert werden, wenn sich die Eigenschaft ändert.Edit: auf re-Lektüre Ihrer Frage, ich bin mir nicht sicher, ob oder nicht, Ihre situation wird dadurch beeinflusst, ob oder nicht Sie verwenden eine
DependencyProperty
- wenn ich lese es richtig, alles, was Sie tun möchten ist, verursachen eine Reihe von Eigenschaften, die aktualisiert werden auf der Benutzeroberfläche, wenn eine dieser Eigenschaften verändert, richtig?Ich glaube nicht, dass es etwas falsch mit, wie Sie die Dinge im moment (D. H. erhöhen viel von
PropertyChanged
Veranstaltungen in jedem setter), aber wenn du nicht scharf auf, dann könnten Sie versuchen, mit einer einzigen Eigenschaft, die stellt relevanten untergeordneten Eigenschaften zu binden, dass sind alles berechnet:Dann
Color
Immobilie auf der ViewModel, das wirft diePropertyChanged
event und binden, die durch die Ansicht:Als ich sagte, ich würde nicht sagen, dass dies vor allem eine Verbesserung auf, was Sie haben bereits obwohl.
DependencyObject
) ich würde nicht generell gehen, dass die route.Den Allgemeinen Regeln sind:
Für XAML-Steuerelemente, dependency properties;
Für Daten (die Sie binden, in die Schnittstelle), verwenden Sie
INotifyPropertyChanged
.Gibt es Ausnahmen, aber Sie sind selten.
Andere Verwendung der dependency properties ist mit navigation journal. Benutzerdefinierte abhängigkeitseigenschaften auf einer Seite mit Juornal-Kennzeichen in den meta-Daten enthalten sind in dem Zustand, WPF spart für die Seite.
Denken Sie daran, dass die Abhängigkeit von Eigenschaften, obwohl Sie Bindung entweder als Quelle oder ein Ziel, sind auch Faden-und Kleinschreibung und bei der Serialisierung werden kann, müssen Sie eine Leihmutter, die Serialisierung als DependencyObject ist nicht serialisierbar.
Oh, und Equals und GetHashCode verschlossen sind 🙁