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