Wpf DependencyObject SetValue与属性访问器

Wpf DependencyObject SetValue与属性访问器,wpf,Wpf,DependencyObjects可以使用SetValue(),并且WPF的大多数(如果不是全部)源于UIElement的控件包含DependencyObject属性,而不是通过SetValue设置的属性。有时在WPF应用程序中执行代码隐藏是很实际的。下面给出了类似的结果。但是哪一个更好呢 <TextBlock x:Name="myTextBlock" Loaded="myTextBlock_Loaded"/> 或 也许差别很小,但我很好奇使用一个是否比另一个有优势。第二个有一点性

DependencyObjects可以使用SetValue(),并且WPF的大多数(如果不是全部)源于UIElement的控件包含DependencyObject属性,而不是通过SetValue设置的属性。有时在WPF应用程序中执行代码隐藏是很实际的。下面给出了类似的结果。但是哪一个更好呢

<TextBlock x:Name="myTextBlock" Loaded="myTextBlock_Loaded"/>


也许差别很小,但我很好奇使用一个是否比另一个有优势。

第二个有一点性能提升*,因为
TextBlock.Text
set的实现实际上是
返回这个.SetValue(TextBlock.TextProperty,value)

但是,应该注意的是,第二个实现可能会出错,例如,您可能会键入

myTextBlock.SetValue(Grid.ColumnProperty, "foo");
它将编译,但可能不会运行(或者至少不会给出预期的结果)

此外,前者将为您提供后者无法提供的类型安全性


*但是,“这个性能提升”应该被jit掉。

在第二个阶段有一个轻微的性能提升*,因为
TextBlock.Text
set的实现实际上是
返回这个.SetValue(TextBlock.TextProperty,value)

但是,应该注意的是,第二个实现可能会出错,例如,您可能会键入

myTextBlock.SetValue(Grid.ColumnProperty, "foo");
它将编译,但可能不会运行(或者至少不会给出预期的结果)

此外,前者将为您提供后者无法提供的类型安全性


*但是,“这一性能提升”应该被即时删除。

依赖属性与实际属性本质上是通过代码获取或设置这些属性的便利。所有依赖项对象的所有依赖项属性都由键/值的“字典”支持。通过
GetValue()
SetValue()
方法访问这些值

什么是“更好”取决于您打算如何使用这些属性。所有内置控件都定义了属性,以便于通过代码初始化对象。如果您使用Get/Set方法尝试同样的方法,则会更加混乱

但不要用什么“更好”来看待它,这样想是行不通的。两者都是必要的。依赖属性是获取/设置依赖对象的可观察属性的方式。通过使用相应的属性访问这些属性,可以更轻松地使用代码


如果您不需要通过代码访问这些依赖属性,那么我想您可以争辩说这些属性是不需要的,但是没有人会想使用它。

具有实际属性的依赖属性本质上是通过代码获取或设置这些属性的便利。所有依赖项对象的所有依赖项属性都由键/值的“字典”支持。通过
GetValue()
SetValue()
方法访问这些值

什么是“更好”取决于您打算如何使用这些属性。所有内置控件都定义了属性,以便于通过代码初始化对象。如果您使用Get/Set方法尝试同样的方法,则会更加混乱

但不要用什么“更好”来看待它,这样想是行不通的。两者都是必要的。依赖属性是获取/设置依赖对象的可观察属性的方式。通过使用相应的属性访问这些属性,可以更轻松地使用代码


如果您不需要通过代码访问这些依赖属性,那么我想您可以争辩说这些属性是不需要的,但是没有人会想使用它。

倾向于代码隐藏,或者绑定到其他地方。前者用于处理一些小事件,以避免在VM中添加l代码。这就是我们的意图。倾向于代码背后,可能会绑定到其他地方。前者用于处理一些小事件,以避免在VM中添加l代码。这就是目的。
myTextBlock.SetValue(Grid.ColumnProperty, "foo");