我使用UserControl
创建了DependencyProperty
。我在UserControl
上为此FormLoad
设置了一个值。但是当我运行应用程序时,没有显示任何值。
我的代码:
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(PersianDateTime), typeof(UCDatePicker),
new PropertyMetadata(PersianDateTime.Now, new PropertyChangedCallback((onchangedcallback))));
public PersianDateTime Value
{
get { return (PersianDateTime)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
private static void onchangedcallback(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
UCDatePicker control = obj as UCDatePicker;
PersianDateTime newdate = (PersianDateTime)e.NewValue;
control.Years = ((PersianDateTime)e.NewValue).Year;
control.Months = ((PersianDateTime)e.NewValue).Month;
control.Days = ((PersianDateTime)e.NewValue).Day;
control.Hours = ((PersianDateTime)e.NewValue).Hour;
control.Minutes = ((PersianDateTime)e.NewValue).Minute;
}
在我的FormLoad
:
uCDatePicker1.Value = PersianDateTime.Now;
当我使用断点时,onchangedcallback
不会执行。
答案 0 :(得分:3)
因为你没有改变价值,
在作业之前和之后,价值等于PersianDateTime.Now
onchangedcallback,如果希望在第一次分配时调用属性更改事件,则可以将依赖项属性的默认值更改为某个默认值
如果PersianDateTime是引用类型(例如类),请更改您的依赖项属性
...new PropertyMetadata(null,...
但是看看PersianDateTime类型,似乎是struct,所以你可以使用
...new PropertyMetadata(DateTime.MinValue.ToPersianDateTime(),...
它会起作用
希望这有帮助