Frage

Ich bin ein wenig verwirrt ein DependencyProperty Objekte zu schaffen, das auf externe Quellen abhängig. Zum Beispiel in einer Ultraschall-Anwendung ich schreibe, habe ich zur Zeit die folgenden in einem Managed C ++ Wrapper (übersetzt C # der Einfachheit halber hier, Umsetzung INotifyPropertyChanged):

public int Gain
{
    get { return ultrasound.GetParam(prmGain); }
    set 
    { 
        ultrasound.SetParam(prmGain, value);
        NotifyPropertyChanged("Gain");
    }
}

All meine Code in WPF verwendet, und ich war zu überlegen, wie die INotifyPropertyChanged Wechsel würde passieren DependencyProperty, und wenn ich von den Änderungen profitieren würde. Es gibt etwa 30 Variablen ähnlich wie diese, von denen die meisten Databound bekommen auf einen On-Screen-Schieber, Textblock oder eine andere Kontrolle.

Würde die folgende korrekt sein für eine DependencyProperty für dieses Objekt zu implementieren?

public int Gain
{
    get { return ultrasound.GetParam(prmGain); }
    set 
    { 
        ultrasound.SetParam(prmGain, value);
        this.SetValue(GainProperty, value); 
    }
}

public static readonly DependencyProperty GainProperty = DependencyProperty.Register(
    "Gain", typeof(int), typeof(MyUltrasoundWrapper), new PropertyMetadata(0));

Ich habe noch nie ein Beispiel, wo this.GetValue(GainProperty) gesehen nicht verwendet wurde. Auch gibt es andere Funktionen, die den Wert ändern können. Würde dies auch die richtige Veränderung sein?

public void LoadSettingsFile(string fileName)
{
    // Load settings...

    // Gain will have changed after new settings are loaded.
    this.SetValue(GainProperty, this.Gain);
    // Used to be NotifyPropertyChanged("Gain");
}

Auch auf einer Seite beachten, soll ich Leistungsgewinne in Fällen erwarten, wo die meisten Eigenschaften sind datengebundene, oder besser gesagt, Leistungsverlust in Fällen, in denen viele Parameter sind nicht datengebundene?

War es hilfreich?

Lösung

Wenn Sie eine Abhängigkeitseigenschaft mit dem Get und Set-Methoden müssen nur einfache Wrapper für this.GetValue () und this.SetValue () sein, der Grund dafür ist, dass WPF die Getter oder Setter nicht verwenden, um den Wert zuzugreifen, so Sie können nicht auf den zusätzlichen Code hängen die ganze Zeit ausgeführt wird.

Wenn Sie diese Eigenschaften müssen tun Abhängigkeit seiner Eigenschaften dann eine Standard-Abhängigkeitseigenschaft erstellen, die Ihre ultrasound.GetParam (prmGain) effektiv Caches führen und ultrasound.SetParam (prmGain, Wert) innerhalb des Property Ereignisses, das wird rufen zuverlässig genannt keine Unabhängig davon, wie die Eigenschaft geändert wird.


Während das, was ich oben geschrieben habe immer noch richtig ist, Sie Frage rereading macht ich denke, dass Sie Missverständnis sein können, was eine Abhängigkeitseigenschaft ist. Wenn dieses C ++ Wrapper-Objekt effektiv Ihr Modell ist dann wollen Sie mit INotifyPropertyChanged bleiben. Abhängigkeitseigenschaften sind so konzipiert, intern durch eine WPF Steuerung verwendet werden, die Bindung zu erleichtern und das Speicherbedarf des Steuer senken. Sie sind nicht in dem Datenanbieter verwendet werden soll, das ist, was die Mitteilungsschnittstellen sind für.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top