So erstellen Sie eine bindbare Eigenschaft in WPF?
ich habe ein user control. Ich will erstellen Sie eine bindbare Eigenschaft, die in meinem Benutzer-Steuerelement. Ich erstelle eine DependencyProperty wie folgt:
public static readonly DependencyProperty DateProperty =
DependencyProperty.Register("Date", typeof(DateTime), typeof(DaiesContainer),
new UIPropertyMetadata(DateTime.Now));
public DateTime Date
{
get { return (DateTime)GetValue(DateProperty); }
set
{
SetValue(DateProperty, value);
}
}
Dann verwende ich es in meinem XAML:
<ctrls:DaiesContainer Date="{Binding Date, Mode=OneWay}"/>
In meinem ViewModel, die get-Methode des Date-Eigenschaft aufgerufen wird. Aber in meinem user-control Date-Eigenschaft ist nicht auf einen Wert festgelegt.
- sind Sie einlegen
DateTime
im XAML-Code in einem kompatibel-Muster ? - Woher wissen Sie, dass die Eigenschaft nicht gesetzt ist? Sie noch nicht registriert PropertyChangedCallback mit den Metadaten Ihrer Abhängigkeitseigenschaft. Beachten Sie, dass der setter der CLR-wrapper nicht aufgerufen, wenn die Eigenschaft in XAML, wie bereits erläutert, hier.
- Danke, es ist gut, aber ich habe zu nennen, nicht statische Methoden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Abhängigkeitseigenschaft Umsetzung fehlt, ist ein
PropertyChangedCallback
, die aufgerufen wird, wenn der Wert der Eigenschaft geändert wurde. Die callback registriert ist, wie eine statische Methode, die ruft die aktuelle Instanz (auf die sich die Eigenschaft geändert wurde) übergeben als ersten parameter (vom TypDependencyObject
). Sie haben zu werfen, dass Sie Ihre Klasse Typ, um den Zugriff auf Instanz-Felder oder-Methoden, wie unten gezeigt.Bitte beachten Sie auch, dass die Einstellung ein Standardwert der Abhängigkeitseigenschaft ist nur einmal für alle Instanzen der Klasse. Einstellung einen Wert von
DateTime.Now
wird daher produzieren die gleiche Standard-Wert für alle von Ihnen, nämlich die Zeit, zu welcher die statischeDependencyProperty
registriert ist. Ich denke, mit etwas mehr sinnvolle, vielleichtDateTime.MinValue
wird, wäre eine bessere Wahl. AlsMinValue
ist bereits der default-Wert einer neu erstelltenDateTime
Beispiel können Sie auch weglassen, der default-Wert aus Ihrer Immobilie Metadaten:Sich verbindlich Modus TwoWay
Ich denke, dass Sie Fehler in XAML die UserControl.
Sollten Sie verbindlich durch
ElementName
, z.B.:In diesem Fall die Bindung an
Date
Eigenschaft vonDaiesContainer
Klasse.Wenn Sie die Bindung ohne
ElementName
:UserControl
DaiesContainer
wird versucht, finden, EigentumDate
imDataContext
des Containers das Steuerelement, und wenn es nicht diese Eigenschaft finden, sehen SieDatePicker
mit leeren gewählten Wert.