Frage

Wir haben ein Objekt, das aus DependyChObject stammt, und implementiert einige Abhängigkeitspropertien.

Grundsätzlich so etwas:

class Context : DependencyObject {
   public static readonly DependencyProperty NameProperty =
   DependencyProperty.Register ("Name", typeof (string), typeof (Context), new PropertyMetadata (""));
    public string Name {
        get {
            return (string)this.GetValue (NameProperty);
        }
        set {
            this.SetValue (NameProperty, value);
        }
    }
}

Dies funktioniert, die Eigenschaft ist eingerichtet, kann gebunden werden usw. Das Problem kommt, wenn ich an das Eigenz der WPF bin, unter Verwendung eines zweiwertigen Bindes. Das Twoway -Teil passiert nie wirklich, WPF ruft niemals den Satz dieser Eigenschaft auf. Ich habe meine Bindung so festgelegt:

<TextBox Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

In diesem Fall sollte das Eingeben im Textfeld die NAME -Eigenschaft sofort aktualisieren, dies jedoch nicht. Wenn ich die Namenseigenschaft in eine reguläre PoCO -Eigenschaft ändere, funktioniert es (obwohl die andere Seite des Twoway offensichtlich nicht der Fall ist, es sei denn, ich implementiere InotifyPropertyChanged).

Was mache ich hier falsch? Dies sollte eine wirklich einfache Sache sein, aber es verursacht mir kein Ende der Kopfschmerzen.

War es hilfreich?

Lösung

Dies ist erwartetes Verhalten. Die CLR -Eigenschaft ist lediglich ein Wrapper um die zugrunde liegenden DependencyProperty. WPF optimiert oft durch Anrufe GetValue und SetValue direkt. Wenn Sie eine benutzerdefinierte Logik benötigen, um auszuführen, verwenden Sie die Metadaten des DependencyProperty.

Andere Tipps

Nach diesem Problem hat mich einige Zeit gekostet:

Für diejenigen unter Ihnen, die das gleiche Problem haben, aber - wie ich - sehen Sie die Lösung in der obigen Antwort nicht:

Um die Vererbung des DataContext zu unterstützen, muss die benutzerdefinierte Klasse (in diesem Fall) abgeleitet werden FrameworkElement statt Abhängigkeitsobjekt. Das ist alles.

Marc

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