Bindung statische Eigenschaft und die Implementierung von INotifyPropertyChanged
Ich bin versucht zu binden eine statische Eigenschaft einer Klasse, um eine gewisse Kontrolle. Ich habe tryied ein paar Umsetzung, aber jeder hat seine problem:
Alle Beispiele verwenden die nächsten XAML:
<Label Name="label1" Content="{Binding Path=text}"/>
1. Ansatz - keine Verwendung von INotifyPropertyChanged
public class foo1
{
public static string text { get; set; }
}
Das problem ist, dass, wenn 'text' Anwesen änderungen der Steuerung wird nicht benachrichtigt.
Zweite Ansatz - die Verwendung von INotifyPropertyChanged
public class foo1 : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private static string _text;
public static string text
{
get { return _text; }
set
{
_text = value;
OnPropertyChanged("text");
}
}
}
Diese nicht kompilieren, da OnPropertyChanged () - Methode ist nicht statisch und es heißt, die innerhalb einer statischen Methode.
Zweiten Ansatz versuchen 2: OnPropertyChanged () - Methode static => dies kann nicht kompiliert werden, weil OnPropertyChanged() ist nun statisch und es wird versucht, "PropertyChanged" - Veranstaltung, die nicht statisch ist.
Zweiten Ansatz versuchen 3: "PropertyChanged" - Veranstaltung static => das nicht kompilieren, da die Klasse nicht implementiert 'INotifyPropertyChanged.PropertyChanged-event (der event ist definiert in 'INotifyPropertyChanged-Schnittstelle ist nicht statisch, sondern hier ist es statisch).
In diesem Punkt gab ich auf.
Irgendwelche Ideen?
InformationsquelleAutor dana | 2011-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
ich würde vorschlagen,Sie müssen nur eine Instanz-Eigenschaft wieder Ihre statische Eigenschaft wie folgt:Aber das macht die ganze Bindung vergleichsweise sinnlos, da Benachrichtigungen über änderungen werden nur in einer Instanz der Klasse und nicht in jedem Fall. Also nur die Bindungen, die binden, um die Eigenschaft auf die spezifische Instanz, auf dem es geändert wurde, aktualisiert.
Eine bessere Methode wäre die Verwendung einer singleton-wie gesehen werden kann,hier.
InformationsquelleAutor H.B.
Mit einer singleton-geht am einfachsten und saubersten zu realisieren. Wenn Sie möchten, zu gehen die harte Weise, ohne Verwendung eines singleton können Sie die folgenden verwenden.
Erstellen Sie eine statische PropertyChangedEventHandler, die aufgerufen wird aus Ihrer statischen Eigenschaft. Wenn Sie erstellen eine neue Instanz der Klasse registrieren, erhalten einen Anruf zurück aus dem statischen Fall. Wenn Sie den Rückruf, Anruf OnPropertyChanged("text"). Das GROßE problem mit diesem ist, dass Sie brauchen, um eine WeakReference, wenn Sie sich für den statischen Fall. Ansonsten wird Ihr Objekt wird bleiben für immer. Ich übersprungen diesem Schritt in den code.
Der Grund, warum Sie brauchen, um vorwärts, auf die Instanz-Ereignis ist, denn wer jemals registrierte die NotifyPropertyChanged muss wissen, wer der "Absender" (also die Instanz von foo1 mit der Instanz-Eigenschaft)
InformationsquelleAutor shimpossible
diese Weise habe ich nicht zu tun jegliche Bearbeitung in der event überhaupt.
das war wirklich hilfreich zum erstellen einer Statusleiste für mein gesamtes Programm und aktualisieren Sie es von überall und jedem Benutzer die Kontrolle in meine ständig wachsende Programm.
Danke an shimpossible
InformationsquelleAutor New Bee