【发布时间】:2010-03-11 11:37:01
【问题描述】:
我在 google 上搜索了如何开始使用 WPF/silverlight 中使用的依赖属性,但对依赖属性一无所知,任何人都可以从初学者的角度告诉我,这样我对此有所了解并在我的项目中使用它
提前致谢。
谁能给我简单应用程序的链接或代码示例,以简单的方式解释什么是依赖属性? 我会很感激的
【问题讨论】:
标签: wpf silverlight
我在 google 上搜索了如何开始使用 WPF/silverlight 中使用的依赖属性,但对依赖属性一无所知,任何人都可以从初学者的角度告诉我,这样我对此有所了解并在我的项目中使用它
提前致谢。
谁能给我简单应用程序的链接或代码示例,以简单的方式解释什么是依赖属性? 我会很感激的
【问题讨论】:
标签: wpf silverlight
我发现实现一个 DependencyProperty 通常涉及四个部分:
您可以将依赖属性添加到 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
【讨论】:
来自我对依赖属性的使用。它们在绑定时变得最重要。当您绑定以显示常规属性时,初始绑定会很好地工作,但是,当属性更改时,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
【讨论】:
看看 Luis Abreu 的博客:http://msmvps.com/blogs/luisabreu/
他在那里有很多关于依赖属性以及如何使用它们的信息。
【讨论】:
我认为您可以将其与关键字产量进行比较。 它允许您生成惰性列表或无限生成器。 每次需要时,都会从该列表中请求一项,然后代码继续流程。
依赖属性与值或内容的概念相同。它基于它所依赖的其他值懒惰地计算所需的值。 它可以缓存该值,并且当底层部分是“脏的”,即发生了某些变化时,它将传播——无效——所有依赖它的级别。
对象需要有 DependencyObject 的设施才能参与(也就是说,引擎会知道它,将其引入链中。)
该机制是通用且不固定的,不只是一个接口需要遵守。 但它比我说的要复杂一些。
我在以下博客文章中找到了一个很好的解释,以表达我的理解: http://blog.hackedbrain.com/2004/12/04/understanding-dependencyobject-and-dependencyproperty/
【讨论】:
首先你应该读一本书。
我已阅读 Manning 的 WPF In Action With Visual Sutdio 2005。
作为对刚刚给我的否定标点符号的回答,依赖属性是称为 WPF 的更大计划的一部分,没有基础知识就无法理解依赖属性。
因此,我认为尝试仅了解什么是依赖属性是浪费时间,因为我担心最终会错误地使用它。
另外,MSDN 网站上有关于 WPF 和依赖属性的免费信息。
【讨论】: