Frage

Ich habe eine Klasse mit 3 Abhängigkeitseigenschaften A, B, C. Die Werte dieser Eigenschaften durch den Konstrukteur und jedesmal, wenn eine der Eigenschaften A, B oder C Änderungen eingestellt sind, wird das Verfahren neu zu berechnen () aufgerufen. Jetzt während der Ausführung des Konstruktors diese Methode wird 3-mal aufgerufen, weil die 3 Eigenschaften A, B, C geändert werden. Hoewever ist dies nicht notwendig, da das Verfahren neu zu berechnen () kann nicht festgelegt, ohne dass alle drei Eigenschaften etwas wirklich nützlich machen. Also, was ist der beste Weg für Immobilien-Änderungsbenachrichtigung aber diese Änderungsbenachrichtigung im Konstruktor umgehen? Ich dachte über die Eigenschaft geändert Benachrichtigung im Konstruktor hinzufügen, aber dann jedes Objekt der Klasse DPChangeSample würde immer mehr und mehr Änderungsbenachrichtigungen hinzuzufügen. Vielen Dank für jeden Hinweis!

class DPChangeSample : DependencyObject
{                  
    public static DependencyProperty AProperty = DependencyProperty.Register("A", typeof(int), typeof(DPChangeSample), new PropertyMetadata(propertyChanged));
    public static DependencyProperty BProperty = DependencyProperty.Register("B", typeof(int), typeof(DPChangeSample), new PropertyMetadata(propertyChanged));
    public static DependencyProperty CProperty = DependencyProperty.Register("C", typeof(int), typeof(DPChangeSample), new PropertyMetadata(propertyChanged));


    private static void propertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ((DPChangeSample)d).recalculate();
    }


    private void recalculate()
    {
        // Using A, B, C do some cpu intensive calculations
    }


    public DPChangeSample(int a, int b, int c)
    {
        SetValue(AProperty, a);
        SetValue(BProperty, b);
        SetValue(CProperty, c);
    }
}
War es hilfreich?

Lösung

Können Sie das versuchen?

private bool SupressCalculation = false;
private void recalculate() 
{ 
    if(SupressCalculation)
        return;
    // Using A, B, C do some cpu intensive caluclations 
} 


public DPChangeSample(int a, int b, int c) 
{
    SupressCalculation = true; 
    SetValue(AProperty, a); 
    SetValue(BProperty, b); 
    SupressCalculation = false;
    SetValue(CProperty, c); 
} 

Andere Tipps

Mit DependencyObject.SetValueBase. Dies umgeht jede Metadaten angegeben, so dass Ihr property wird nicht aufgerufen werden. Siehe Msdn .

Sie mögen nicht neu zu berechnen auszuführen (), wenn alle drei Eigenschaften festgelegt sind, sondern in der es wird vom Konstruktor aufgerufen, wenn a, b und c Einstellung? ist das richtig?

Wenn ja, können Sie einfach einen Scheck in der neu zu berechnen in der Nähe der Spitze setzen zu prüfen, ob alle drei Eigenschaften festgelegt sind und entscheiden, ob Sie ausführen möchten oder nicht ....

Dies funktioniert, weil Sie, dass

Erwähnungen
  

als das Verfahren neu zu berechnen () kann nicht tun   etwas wirklich nützlich, ohne alle 3   Eigenschaften festgelegt.

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