我一直在想我何时应该在自定义控件中使用属性或依赖属性一段时间,所以我认为这是个好主意。
让我说我有一个简单的(我的意思是,非常简单)UserControl,里面只有一个Button和一个TextBlock。让我们调用TextBlock" myTextBlock"。
现在,如果我知道我需要将TextBlock的Text绑定到其他东西,我会使用依赖属性,而那不是一个问题。
但是如果我只是需要通过XAML将TextBlock的Text属性设置为某个值并保留它? 如果我使用Property而不是DependencyProperty,这有关系吗? 一个选项是否比另一个更快/更好,如果是,为什么?
以下是两个选项的示例:
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; }
}
我通常选择简单的属性,但我不知道这是否是更好的方法。当然它工作正常,这不是问题。
提前致谢!
塞尔吉奥
答案 0 :(得分:1)
我总是问这些基本问题
我是否需要将其设置为可绑定,动画或样式并具有默认值 简单属性无法为此控件提供的设置?
当我要序列化/反序列化时,是否需要使用此新属性保留XAML(表达式) 控制?
如果是,那么我会使用DependencyProperty
。如果没有,那么我只是使用在该控件中使用的简单属性。它与您是否要在对象中使用fields
vs properties
的问题相似。我的提示是在您需要框架的功能时使用它,因为它们为您提供了更多选项。您想知道您是否需要这些选项。
您想要使用DependencyProperty的另一个原因是您有一个基本/子控件关系,并且您希望其他开发人员能够使用它。您可以提供即时静态getter / setter来读取/修改控件的值,而不是创建接口以向控件公开。您在创建DependencyProperty
时已在创建界面。
如有疑问,请始终针对您的控件创建简单的属性/字段。
我不同意与DependencyProperty
一起使用的评论,因为与简单的酒店相比,评论并不便宜。
例如,您想要对属性进行更改并且它是DependencyProperty
,那么我很可能需要手动编辑属性的名称string
和很容易出错。现在将它与一个简单的属性进行比较,该属性为我提供了编译时间检查,我可以轻松找到引用并对其进行一些更改。
我曾经遇到DependencyProperty
过度使用并且应该只使用简单属性的经验,并且其他开发人员可以清楚地了解其意图。