何时在自定义控件中使用属性而不是依赖属性

本文关键字:属性 依赖 自定义控件 何时 | 更新日期: 2023-09-27 18:16:26

我一直在想什么时候应该在自定义控件中使用属性或依赖属性,所以我认为这是一个好主意。

假设我有一个简单的(我的意思是,非常简单)UserControl只有一个按钮和一个TextBlock里面。我们把这个TextBlock命名为myTextBlock。

现在,如果我知道我需要将TextBlock的Text绑定到其他东西上,我会使用依赖属性,这不是问题。

但是如果我只是需要设置TextBlock的文本属性通过XAML的某个值,并离开它吗?如果我使用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; }
}

我通常使用简单的Property,但我不知道这是不是在这里使用的更好的方法。当然可以,这不是问题。

提前感谢!

塞尔吉奥。

何时在自定义控件中使用属性而不是依赖属性

我总是问这些基本问题

我需要这是可绑定的,动画,或样式和默认简单属性无法为此控件提供的设置?

当我要序列化/反序列化它时,我需要保留带有这个新属性的XAML(表达式)吗控制?

如果是,那么我将使用DependencyProperty。如果没有,那么我只使用简单的属性在这个控件中使用。这类似于你是否想在一个对象中使用fieldsproperties的问题。我的建议是,当您需要在属性中使用框架的功能时使用它,因为它们为您提供了更多选项。你想知道你是否需要这些选项。

你想使用DependencyProperty的另一个原因是因为你有一个基/子控件关系,你希望其他开发人员能够使用它。您不需要创建向控件公开的接口,而是提供即时静态getter/setter来读取/修改控件的值。当您创建DependencyProperty时,您已经创建了您的接口。

当你有疑问时,总是创建简单的属性/字段。

我不同意总是使用DependencyProperty的评论,因为与简单的属性相比,它并不便宜。

例如,您想对属性进行更改,并且它是DependencyProperty,那么机会是,我需要手动编辑属性的名称,这是string并且容易出错。现在将其与一个简单的属性进行比较,该属性可以给我一个编译时检查,我可以很容易地找到引用并对其进行一些更改。

我曾经有过这样的经历,DependencyProperty是一个过度的功能,应该只使用简单的属性,这样其他开发人员就可以清楚地阅读。