2011-09-29 21 views
1

我創建了一個UserControlDependencyProperty。我在FormLoad上爲此UserControl設置了一個值。但是當我運行該應用程序時,沒有顯示任何值。不要在DependencyProperty中運行PropertyChangedCallback

我的代碼:

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不執行。

回答

3

因爲你不改變值,

值等於PersianDateTime.Now之前,你的任務

onchangedcallback將被稱爲只有當你將分配不同的值依賴屬性,您可以更改默認值後依賴屬性,如果你想屬性更改事件在第一項任務

被稱爲如果PersianDateTime是引用類型(類爲例)改變你的依賴屬性像這樣

一些默認值
...new PropertyMetadata(null,... 

但看在PersianDateTime類型,看來,這是結構,所以你可以使用

...new PropertyMetadata(DateTime.MinValue.ToPersianDateTime(),... 

,也將努力

希望這有助於

+0

PLZ解釋more.i設置PersianDateTime.Now,但是當運行應用程序顯示0 –

+0

是PersianDateTime你的自定義類型?它是階級還是結構?顯示該代碼? –

+0

它是一個類,將日期時間更改爲persiandatetime。 –

相關問題