WPF / SilverLight中的依赖属性

时间:2010-03-11 11:37:02

标签: wpf silverlight

我在google上搜索过如何开始使用WPF / silverlight中使用的依赖项属性,但是从初学者的角度来看,没有人知道依赖属性,任何人都能告诉我它,所以我对它有所了解并在我的项目中使用它

提前感谢。

任何人都可以给我简单的应用程序的链接或代码示例,以简单的方式解释什么是依赖属性是??? 我将非常感谢

5 个答案:

答案 0 :(得分:7)

我发现实现DependencyProperty通常涉及四个部分:

  • DependencyProperty本身
  • 带有get和set的属性
  • 静态更改处理程序
  • 实例更改处理程序

您可以向UserControl添加依赖项属性,以便您可以将数据绑定到实例化UserControl的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

答案 1 :(得分:4)

从我使用依赖属性。它们在绑定时变得最重要。当您绑定以显示常规属性时,初始绑定将很有效,但是,当属性更改时,UI不会始终更新,在这种情况下,您可以在类上实现INotifyPropertyChanged并引发NotifyPropertyChanged事件,但是依赖属性将在不实施INotifyProperty Changed的情况下为您更新。

触发器是另一个重要因素。如果您希望创建一个触发器,以便在您的某个属性设置为某个值时触发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

答案 2 :(得分:1)

看看Luis Abreu的博客:http://msmvps.com/blogs/luisabreu/

他有很多关于依赖性属性以及如何使用它们的信息。

答案 3 :(得分:0)

我认为您可以将其与关键字产量进行比较。 它允许您生成惰性列表或无限生成器。 每次需要从该列表中请求一个项目时,代码将继续流程。

依赖属性与值或内容的想法相同。它根据它所依赖的其他值懒惰地计算所需的值。 它可以缓存值,当底层部分“脏”时,即更改的内容,它将传播 - 无效 - 所有依赖它的级别。

对象需要具有DependencyObject的功能才能参与(也就是说,引擎会知道它,将它引入链中。)

该机制是通用的和不固定的,不仅有一个接口要遵守。 但它比我说的要复杂一些。

我在以下博客文章中找到了一个很好的解释,以表达我的理解: http://blog.hackedbrain.com/2004/12/04/understanding-dependencyobject-and-dependencyproperty/

答案 4 :(得分:-4)

对于初学者,你应该读一本书。

我已阅读曼宁的 WPF In Action with Visual Sutdio 2005

作为刚给我的负面标点符号的答案,Dependency Property是一个名为WPF的更大计划的一部分,如果没有基础知识就无法理解依赖属性。

因此,我认为尝试仅了解什么是依赖属性是浪费时间,因为我担心最终会错误地使用它。

此外,MSDN网站提供有关WPF和依赖属性的免费信息。