[UWP]依赖属性1:概述
1. 概述依赖属性(DependencyProperty)是UWP的核心概念,它是有DependencyObject提供的一种特殊的属性。由于UWP的几乎所有UI元素都是集成于DependencyObject的FramewordElement,并且这些UI元素的几乎所有属性及它们出现在XAML中的几乎所有属性都是依赖属性,所以可以说依赖属性是专门为UI设计的属性系统。 依赖属性的定义: /// <summary> /// 获取或设置Title的值 /// </summary> public string Title { get { return (string)GetValue(TitleProperty); } set { SetValue(TitleProperty, value); } } /// <summary> /// 标识 Title 依赖属性。 /// </summary> public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(string), typeof(MyPage), new PropertyMetadata(string.Empty)); 如上述代码所示,和CLR属性不同依赖属性需要定义TitleProperty ,然后在属性包装器(Getter和Setter)中通过GetValue和SetValue函数操作属性值。 2. 使用的场景UWP的依赖属性经过大幅简化(相对于WPF),更关注它的核心功能:使用绑定,通过多个输入计算属性值,属性值变化通知,节约内存使用。 2.1 绑定通过属性包装器,依赖属性可以像CLR属性那样使用,也可以在XAML中通过绑定来使用,这是CLR属性不能提供的功能。 在XAML中使用: <TextBlock x:Name="TextElement" Text="{Binding Title}" /> 在代码中使用: var binding = new Windows.UI.Xaml.Data.Binding(); binding.Path = new PropertyPath("Title"); TextElement.SetBinding(TextBlock.TextProperty, binding); 2.2 通过多个输入计算属性值在UWP中依赖属性通过多个输入源计算属性的值,从而使开发人员就避免了不必要的属性设置值或者处理属性值变更通知。以下列表从优先级由高到低列出了依赖属性的使用顺序。
2.3 属性值变化通知使用依赖属性,不必再实现INotifyPropertyChanged即可在属性改变时通知UI更新。也可以在PropertyMeta中使用PropertyChangedCallback或DependencyObject.RegisterPropertyChangedCallback监视依赖属性的属性值改变。 2.4 节约内存使用前面提到,UWP可以不必为所有值都设置值,UI元素的依赖属性可以从样式、继承值、默认值等计算出实际值,并不需要分配内存;如果设置了本地值,这个本地值将存储在HashTable中,之后从这个HashTable中读取。这是一种以时间换空间的做法。 3 依赖属性和CLR属性之间的选择使用依赖属性的情况
使用CLR属性的情况
4. 依赖属性和线程所有依赖属性都只能在UI线程上使用,否则会抛异常(“应用程序调用一个已为另一线程整理的接口。”)。不过如果使用Async模式的话通常会回避了线程的问题。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |