Wo dies die clr Art und Weise des Schreibens eine Eigenschaft ist:Wie Verwenden eines programmatischen Get-Äquivalents in einer WPF-Abhängigkeitseigenschaft?
public byte Value
{
get{
return GetByteData();
}
set{
SetByteData(value);
}
}
ich gelesen habe auf, wie die gleiche Art und Weise die Abhängigkeitseigenschaft zu tun, und das ist alles, was ich von mir selbst tun könnte:
public byte Value
{
get { return (byte)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
"Value", typeof(byte), typeof(MyControl),
new FrameworkPropertyMetadata((byte)0, ValueChanged));
public static void ValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
byte r = (byte)e.NewValue;
MyControl v = (MyControl)d;
v.SetByteData(r);
}
Mit den Beispielen, die ich mir angesehen habe, aus denen ich das obige Snippet gemacht habe, kann ich keinen Platz finden, um die GetByteData()
zu setzen, die einen Ausgabewert für den aktuellen UI-Zustand berechnet, wenn der Benutzer interagiert, um den "Wert" zu aktualisieren.
Bis vorhin habe ich es irgendwie in den Getter wie mit clr, aber ich habe das Gefühl, dass es falsch ist, aber ich könnte falsch liegen. Wo soll ich es hinstellen? Wenn nicht, wie soll ich vorgehen? Ist es überhaupt möglich, einen programmatischen Getter für eine Abhängigkeitseigenschaft zu haben?
Es ist möglich, dass ich die falschen Schlüsselwörter verwendet habe, um nach einer Lösung zu suchen. Jede Hilfe, die mich in die richtige Richtung bringt, wäre sehr willkommen. Danke im Voraus.
Leider Abhängigkeitseigenschaften haben nicht ein "get Rückruf". Ihr Getter liefert immer nur den Wert, der zuvor festgelegt wurde (entweder direkt oder durch eine Bindung, einen Stil, einen Standardwert usw.). Warum muss Ihre Immobilie überhaupt eine Abhängigkeitseigenschaft sein? – Clemens
Beachten Sie auch, dass die Zuweisung 'v.Value = r' im PropertyChangedCallback redundant ist. Die Eigenschaft hat diesen Wert bereits. Ich habe es aus Ihrem Beispielcode entfernt. – Clemens
Oh! Ein ganz anderer Ansatz! Das bedeutet, dass ich den Abhängigkeitswert aktualisieren muss, indem ich jedes Mal ein Ereignis auslöst, wenn der Benutzer interagiert? Ich nehme an, dass "SetByteData" jedes Mal verwenden würde, um die Benutzeroberfläche zu synchronisieren. Irgendwie überflüssig, aber ich denke, ich könnte eine Zustandsvariable verwenden, um das Wiederholen zu überspringen. @why es muss Abhängigkeit sein: Ich brauche ein anderes UI-Element zu tun: '{Binding Value, ElementName = MyControlName}'. Ich bin mir nicht sicher, ob das mit Clr-Eigenschaften funktionieren würde ... – RiA