C# 何时在自定义控件中对依赖项属性使用属性?
一段时间以来,我一直在想什么时候应该在自定义控件中使用属性或依赖性属性,所以我想问一下是个好主意 假设我有一个简单(我是说,非常简单)的用户控件,里面只有一个按钮和一个文本块。让我们将文本块称为“myTextBlock” 现在,如果我知道需要将该文本块的文本绑定到其他内容,我会使用依赖属性,这不是问题 但是,如果我只需要通过XAML将TextBlock的Text属性设置为某个值,然后保持不变,该怎么办? 如果我使用属性而不是从属属性,这有关系吗? 一个选项是否比另一个更快/更好,如果是,为什么 以下是具有两个选项的示例:C# 何时在自定义控件中对依赖项属性使用属性?,c#,wpf,xaml,windows-runtime,windows-10,C#,Wpf,Xaml,Windows Runtime,Windows 10,一段时间以来,我一直在想什么时候应该在自定义控件中使用属性或依赖性属性,所以我想问一下是个好主意 假设我有一个简单(我是说,非常简单)的用户控件,里面只有一个按钮和一个文本块。让我们将文本块称为“myTextBlock” 现在,如果我知道需要将该文本块的文本绑定到其他内容,我会使用依赖属性,这不是问题 但是,如果我只需要通过XAML将TextBlock的Text属性设置为某个值,然后保持不变,该怎么办? 如果我使用属性而不是从属属性,这有关系吗? 一个选项是否比另一个更快/更好,如果是,为什么
public String ButtonText
{
get { return (String)GetValue(ButtonTextProperty); }
set { SetValue(ButtonTextProperty, value); }
}
public static readonly DependencyProperty ButtonTextProperty =
DependencyProperty.Register("ButtonText", typeof(String), typeof(MyUserControl),
new PropertyMetadata(String.Empty, OnButtonTextPropertyChanged));
private static void OnButtonTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
(MyUserControl)d.myTextBlock.Text = (String)e.NewValue;
}
仅凭财产:
public String ButtonText
{
get { return myTextBlock.Text; }
set { myTextBlock.Text = value; }
}
我通常使用简单属性,但我不知道这是否是在这里使用的更好方法。当然可以,这不是问题
提前谢谢
塞尔吉奥我总是问这些基本问题 我是否需要它是可绑定的、动画或样式并具有默认值 简单属性无法为此控件提供的设置 当我要序列化/反序列化此属性时,是否需要使用此新属性保留XAML(表达式) 控制 如果是,那么我将使用
dependencProperty
。如果不是,那么我只使用简单的属性来在这个控件中使用。这与是否要在对象中使用字段
vs属性
的问题类似。我的建议是,当您的属性中需要框架的功能时,使用它,因为它们为您提供了更多选项。您想知道是否需要这些选项。
您希望使用DependencyProperty的另一个原因是您有一个基/子控件关系,并且您希望其他开发人员能够使用它。您没有创建向控件公开的接口,而是提供即时静态getter/setter来读取/修改控件的值。当您创建dependencProperty
如有疑问,请始终针对控件创建简单的属性/字段
我不同意总是与dependencProperty
一起出现的评论,因为它与简单属性相比并不便宜
例如,如果您想更改属性,而它是一个依赖属性
,那么很可能需要手动编辑属性的名称,该属性是一个字符串
,并且容易出错。现在将其与一个简单的属性进行比较,该属性为我提供了编译时检查,我可以很容易地找到引用并对其进行一些更改
我曾经有过这样的经历:
dependencProperty
是一种过火的行为,应该只使用简单的属性,其他开发人员可以清楚地看到它的意图。不仅是数据绑定,而且样式设置器和动画都需要依赖属性。我会一直使用依赖属性,因为它提供了更大的灵活性。此外,即使您只需要双向绑定(而不是动画),也可以使用简单的属性实现INotifyPropertyChanged
,而不是一直使用dependencproperty