2010-03-11 131 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/