INotifyPropertyChanged und statische Eigenschaften
Ich bin binden mich in Knoten über ein einfaches problem. Ich habe eine Klasse, die INotifyPropertyChanged
. Einige der Instanz-Eigenschaften' Getter verwenden Sie statische Eigenschaften und damit auch Ihre Werte ändern kann, wenn die statische Eigenschaft ändert? Hier ist ein Vereinfachtes Beispiel.
class ExampleClass : INotifyPropertyChanged
{
private static int _MinimumLength = 5;
public static int MinimumLength
{
get
{
return _MinimumLength;
}
set
{
if (_MinimumLength != value)
{
_MinimumLength = value;
//WHAT GOES HERE
}
}
}
private int _length = -1;
public int length
{
get
{
return (_length > _MinimumLength) ? _length : _MinimumLength;
}
set
{
var oldValue = (_length > _MinimumLength) ? _length : _MinimumLength;
if (_length != value)
{
_length = value;
var newValue = (_length > _MinimumLength) ? _length : _MinimumLength;
if (newValue != oldValue)
{
OnPropertyChanged("length");
}
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Klar, wenn die statische Eigenschaft MinimumLength
änderungen, die dann jede Instanz der Eigenschaft length
können sich auch ändern. Aber wie sollte der statische Konstanteneigenschaft signal das mögliche änderung der Instanzen? Es kann nicht rufen OnPropertyChanged
da, dass ist nicht statisch.
Ich könnte eine Liste in der Klasse alle Instanzen und rufen Sie eine Methode auf jeden, aber irgendwie fühlt sich das wie overkill. Oder ich könnte ziehen Sie die statischen Eigenschaften, die sich in einer singleton-Klasse, aber logisch, Sie Leben in der Klasse. Gibt es ein etabliertes Muster für diese oder sollte ich mir Gedanken über das anders?
InformationsquelleAutor der Frage dumbledad | 2013-01-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn man geneigt zu behaupten, dass design dann würde ich mit einer Lösung wie der folgenden:
Dies ist sehr viel entspricht die Aufrechterhaltung einer Liste von Instanzen, aber ich finde es besser zu warten und übersichtlicher. Auch Sie wirklich brauchen, um eine schwache event-handler-Strategie, sonst, Ihre Instanzen werden nicht von der garbage Collection eingesammelt, weil Sie immer im Zusammenhang mit der statischen Ereignis, das wirkt wie eine GC root.
Lesen Sie mehr über die schwache event-Handler in den folgenden blog-Beiträge (die wurden von mir geschrieben, bin ich also voreingenommen):
.NET Schwach-Event-Handler – Teil I
.NET Schwach-Event-Handler – Teil I
In ein unbedeutender Hinweis: Ihr code ist derzeit feuern Eigenschaft geändert, wenn in der Tat der Wert der Eigenschaft nicht geändert. Zum Beispiel:
InformationsquelleAutor der Antwort João Angelo
Könnte die erwähnte Technik in Bindung statische Eigenschaft und die Implementierung von INotifyPropertyChanged aber auch das eine Meldung gegen die "Länge", z.B.
InformationsquelleAutor der Antwort Phil
Stand ich vor dem gleichen problem. Hier ist die Lösung, die ich haben an Ort und Stelle.
Dann benutze ich es im XAML, dass
InformationsquelleAutor der Antwort Claude Catonio