2010-03-11 168 views
3

我已經搜索了關於如何開始使用WPF/silverlight中使用的依賴項屬性,但沒有得到任何關於依賴屬性的想法,任何人都可以告訴我關於它,從初學者的觀點,以便我對此有所瞭解並將其用於我的項目WPF/SilverLight中的依賴項屬性

在此先感謝。

可以任何一個給我簡單的應用程序的鏈接或代碼示例,它以簡單的方式解釋什麼是依賴性屬性是??? 我會非常感謝

回答

7

我發現實現一個DependencyProperty通常包括四個部分:

  • 的DependencyProperty的本身
  • 房產以獲取和設置
  • 靜態變爲處理器
  • 實例更改處理

可以使您可以將數據綁定到在用戶控件實例化DataContext的東西依賴屬性添加到用戶控件。例如,您可以將屬性添加到SoUserControl:

#region SampleProperty // Demo for SO 2424526 

    public static readonly DependencyProperty SamplePropertyProperty 
     = DependencyProperty.Register("SampleProperty", typeof(int), typeof(SoUserControl), new PropertyMetadata(OnSamplePropertyChanged)); 


    /// <summary> 
    /// Demo for SO 2424526 
    /// Gets or sets dependency property. 
    /// </summary> 
    public int SampleProperty 
    { 
     get { return (int)GetValue(SamplePropertyProperty); } 
     set { SetValue(SamplePropertyProperty, value); } 
    } 

    /// <summary> 
    /// Handld changes to SamplePropertyProperty by calling a handler in the associated object. 
    /// </summary> 
    /// <param name="obj">object the property is associated with</param> 
    /// <param name="e">details of change</param> 
    static void OnSamplePropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) 
    { 
     (obj as SoUserControl).OnSamplePropertyChanged(e); 
    } 

    /// <summary> 
    /// Handle changes to the SamplePropertyProperty dependency property. 
    /// </summary> 
    /// <param name="e">details of change</param> 
    private void OnSamplePropertyChanged(DependencyPropertyChangedEventArgs e) 
    { 
     int SamplePropertyNewValue = (int)e.NewValue; 
     // do something with the internal logic of the control 
    } 

    #endregion 
+0

感謝您的時間和答案,這是真正需要的,一個想我要問你,是它是如何知道值已更改並傳遞給控件以顯示已更改的值的。 再次感謝 – 2010-03-13 05:42:52

-4

你應該讀一本書,爲初學者。

我已閱讀WPF In Action With Visual Sutdio 2005來自Manning。

作爲剛剛給我的負面標點符號的答案,依賴屬性是名爲WPF的更大規劃的一部分,並且無法理解沒有基礎的依賴屬性。

因此,我認爲試圖只瞭解什麼是依賴屬性是浪費時間,因爲我擔心最終會錯誤地使用它。

此外,MSDN網站有關於WPF和依賴屬性的免費信息。

4

從我的依賴屬性中使用。綁定時它們變得最重要。當綁定來顯示一個常規屬性時,初始綁定將會很好,但是,當屬性發生更改時,UI不會始終更新,在這種情況下,您可以在您的類上實現INotifyPropertyChanged並引發NotifyPropertyChanged事件,但是會依賴於一個Dependency屬性將爲您更新而不實施INotifyProperty已更改。

觸發器是另一個大的。如果你希望創建一個觸發器來觸發一個WPF動畫,只要你的屬性被設置爲一個特定的值......那麼你需要觸發一個依賴屬性。

DepenedencyProperties只能在派生自DependencyObject的類型上實現。 UIElement派生自Visual,派生自DependencyObject,因此.Net控件的大多數屬性都是依賴項屬性。當創建並註冊我自己的DependencyProperties時,它通常位於我自定義的UserControls上,就像從UIElement繼承的一樣。

這對我來說非常令人沮喪,當我第一次嘗試對我的普通班的一個創建一個依賴屬性(你最好不要使用INotifyPropertyChanged的位置)

鏈接: http://msdn.microsoft.com/en-us/library/ms752914.aspxhttp://www.wpftutorial.net/DependencyProperties.html

0

我認爲您可以將它與關鍵字yield進行比較。它允許你生成一個懶惰列表或一個無限生成器。 每次需要從該列表中請求一個項目時,代碼會繼續執行該流程。

依賴屬性對於值或內容是相同的想法。它會根據它所依賴的其他值來懶惰地計算所需價值。 它可以緩存該值,並且當底層部分是「髒」的時候,即某些東西發生了變化,它會傳播 - 無效 - 所有依賴它的層次。

對象需要具備的DependencyObject的參與設施(也就是,所以發動機會了解它,把它介紹給鏈條。)

機制是通用的,不固定的,沒有隻需一個界面即可遵守。 但它比我說的要複雜一些。

我找到了一個很好的解釋,接線我的理解,在下面的博客文章: http://blog.hackedbrain.com/2004/12/04/understanding-dependencyobject-and-dependencyproperty/