2011-02-25 90 views
6

我剛剛開始玩WPF中的DependencyProperties,我想在檢查他們時檢查幾個想法。什麼是DependencyProperty的ownerType不是DependencyObject?

鑑於以下(現在忽略命名約定):

class MyTestClass 
{ 
    public static readonly DependencyProperty dp1 = DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass)); 

    public static readonly DependencyProperty dp2 = DependencyProperty.Register("MyProp2", typeof(String), typeof(MyTestClass), new PropertyMetadata("Hello")); 
} 

我發現,DP2拋出與我預期的消息「‘MyTestClass’類型必須自DependencyObject派生」一TypeInitializationException,但DP1是很高興地接受了。

現在,我明白爲什麼dp2引發異常,因爲我試圖在非DependencyObject類型上註冊屬性元數據,這很好。我已經看了下面的內容,並且可以看到dp1和dp2遵循的代碼路徑,所以我從代碼角度理解了爲什麼dp1不會引發異常,但從概念上講,我會期望dp1和dp2引發相同的異常。

我的問題是創建一個DependencyProperty,像dp1的ownerType不是一個DependencyObject的用途,因爲我不明白如何在DependencyObject上沒有GetValue/SetValue方法的情況下使用它。

回答

3

編輯
的原因第一個註冊簽名IST註冊一個DependencyProperty有可能由Clear - 方法恢復沒有默認值,也沒有註冊值更改回調。

因爲沒有默認值,所以不會檢查默認值是否有效,因此不會拋出異常。但是沒有使用這種註冊。你沒有任何好處,它不會拋出異常並不意味着它對某些東西有好處 - 它只是沒有錯。

+0

嗨,謝謝你的回覆。我明白爲什麼ownerType可以設置爲任何對象,並且檢查是在運行時執行的。然而,我的問題是,爲什麼以下不會拋出一個運行時異常,因此在這種方式下創建DependencyProperty有什麼用處: DependencyProperty.Register(「MyProp」,typeof(String),typeof(MyTestClass)) ; – 2011-02-25 10:14:37

+0

@Matt__E_:對不起,我會更精確地閱讀這個問題。我改變了我的答案。 BTW +1的問題。 – HCL 2011-02-25 10:50:52

+1

嗨,HCL。非常感謝您花時間閱讀我的評論並再次回覆。我非常感謝。我認爲沒有用這種方式註冊dp1的有用的目的,但是因爲它沒有拋出異常,我認爲它必須有一個我沒有意識到的目的。感謝您確認它沒有任何用處。 – 2011-02-25 11:02:08

相關問題