【问题标题】:Dependency Property In WPF/SilverLightWPF/SilverLight 中的依赖属性
【发布时间】:2010-03-11 11:37:01
【问题描述】:

我在 google 上搜索了如何开始使用 WPF/silverlight 中使用的依赖属性,但对依赖属性一无所知,任何人都可以从初学者的角度告诉我,这样我对此有所了解并在我的项目中使用它

提前致谢。

谁能给我简单应用程序的链接或代码示例,以简单的方式解释什么是依赖属性? 我会很感激的

【问题讨论】:

    标签: wpf silverlight


    【解决方案1】:

    我发现实现一个 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
    

    【讨论】:

    • 感谢您的时间和答案,这才是真正需要的,我想我想问您,它是如何知道值已更改并将其传递给控件以显示更改后的值。再次感谢
    【解决方案2】:

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

    触发器是另一个重要的触发器。如果您希望创建一个触发器以在您的某个属性设置为某个值时触发 WPF 动画...那么您需要触发依赖属性。

    DependencyProperties 只能在派生自 DependencyObject 的类型上实现。 UIElement 派生自 Visual,Visual 派生自 DependencyObject,因此 .Net 控件的大多数属性已经是依赖属性。在创建和注册我自己的 DependencyProperties 时,它通常位于我的自定义 UserControls 上,因为它继承自 UIElement。

    当我第一次尝试在我的一个常规类上创建依赖属性时,我感到非常沮丧(你最好在这里使用 INotifyPropertyChanged)

    链接: http://msdn.microsoft.com/en-us/library/ms752914.aspx, http://www.wpftutorial.net/DependencyProperties.html

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        依赖属性与值或内容的概念相同。它基于它所依赖的其他值懒惰地计算所需的值。 它可以缓存该值,并且当底层部分是“脏的”,即发生了某些变化时,它将传播——无效——所有依赖它的级别。

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

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

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

        【讨论】:

          【解决方案5】:

          首先你应该读一本书。

          我已阅读 Manning 的 WPF In Action With Visual Sutdio 2005

          作为对刚刚给我的否定标点符号的回答,依赖属性是称为 WPF 的更大计划的一部分,没有基础知识就无法理解依赖属性。

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

          另外,MSDN 网站上有关于 WPF 和依赖属性的免费信息。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-11-30
            • 2023-03-16
            • 1970-01-01
            • 1970-01-01
            • 2012-11-27
            • 2014-05-23
            相关资源
            最近更新 更多