Entwickler-Ecke
WPF / Silverlight - DependencyProperty klappt nicht richtig
Määx - Di 16.09.14 10:31
Titel: DependencyProperty klappt nicht richtig
Hallo zusammen,
ich habe angefangen mir einen eigenen TimePicker zu basteln (zunächst als UserControl, später als CustomControl). Da zu habe ich eine DependencyProperty angelegt, die die Zeit zwischen dem Control und dessen Host synchronisieren soll:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| public partial class TimePicker : UserControl, INotifyPropertyChanged { [...] DateTime _Time = DateTime.Now; [Description("The time displayed by the timePicker"), Category("Time Control")] public DateTime Time { get { return (DateTime)GetValue(TimeProperty); } set { if(_Time.Equals(value)) return;
if (value != null) _Time = value; else _Time = new DateTime(2014, 1, 1, 0, 0, 0); OnPropertyChanged("Time"); OnPropertyChanged("TimeHour"); OnPropertyChanged("TimeMinute"); OnPropertyChanged("TimeSecond"); SetValue(TimeProperty, Time); } } public static readonly DependencyProperty TimeProperty = DependencyProperty.Register("Time", typeof(DateTime), typeof(TimePicker)); [...] } |
Die einzelnen Textfelder des TimePicker binden sich dann an die Variablen TimeHour, TimeMinute, TimeSecond, die die Werte aus Time berechnen bzw Time neu setzen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| public string TimeHour { get { return Time.Hour.ToString("00"); } set { int hour; if (int.TryParse(value, out hour)) { if (hour >= 24) Time = new DateTime(Time.Year, Time.Month, Time.Day, 0, Time.Minute, Time.Second); else if (hour < 0) Time = new DateTime(Time.Year, Time.Month, Time.Day, 0, Time.Minute, Time.Second); else Time = new DateTime(Time.Year, Time.Month, Time.Day, hour, Time.Minute, Time.Second); } } } |
Binde ich mein Control nun jedoch in meinem xaml ein
C#-Quelltext
1: 2:
| <wpfCon:TimePicker Time="{Binding LeadingDateTime}"/> <DatePicker SelectedDate="{Binding LeadingDateTime}"/> |
erhalte ich folgenden Fehler:
System.Windows.Data Error: 40 : BindingExpression path error: 'LeadingDateTime' property not found on 'object' ''TimePicker' (Name='')'. BindingExpression:Path=LeadingDateTime; DataItem='TimePicker' (Name=''); target element is 'TimePicker' (Name=''); target property is 'Time' (type 'DateTime')
und der TimePicker wird nicht korrekt initialisiert, der DatePicker hingegen schon...
Hat jemand eine Idee was ich hier falsch mache?
Vielen Dank
Määx
Määx - Di 16.09.14 14:24
ah ok, super vielen Dank für die Infos! Dann schaue ich mir zunächst einmal die Tutorials an und ändere die Sache mit der property...
Den Compilerfehler verstehe ich leider auch absolut nicht, da "LeadingDateTime" ja eigentlich niemals im "TimePicker" gesucht werden sollte, oder?
Vielen Dank
Määx
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!