DependencyObject SetValue vs Property访问器

时间:2015-11-05 02:56:22

标签: wpf

DependencyObjects可以使用SetValue(),并且大多数(如果不是全部)WPF的库存UIElement派生控件包含可以通过SetValue设置的DependencyObject属性。有时在WPF应用程序中执行代码隐藏是切实可行的。下面产生类似的结果。但哪一个更好?

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

设置Text属性可以通过两种方式完成。

myTextBlock.Text = "foo";

OR

myTextBlock.SetValue(TextBlock.TextProperty, "foo");

也许这种差异是微不足道的,但我很好奇是否有利用这一方面的优势。

2 个答案:

答案 0 :(得分:0)

在第二个版本中,性能略有提升*,因为 jQuery.expr[':'].Contains = function(a, i, m) { return jQuery(a).text().toUpperCase() .indexOf(m[3].toUpperCase()) >= 0; }; 集的实现实际上是TextBlock.Text

然而,应该注意的是,第二种实现可能是错误的,例如你可能最终输入

return this.SetValue(TextBlock.TextProperty, value);

哪个会编译,但可能不会运行(或者至少不会给出预期的结果)。

此外,前者将为您提供后者不会给予的类型安全性。

*“这种性能提升”应该被忽略。

答案 1 :(得分:0)

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

什么是&#34;更好&#34;一切都取决于你打算如何使用这些属性。所有内置控件都定义属性,以便通过代码更轻松地初始化对象。如果你使用Get / Set方法尝试相同的话会更加混乱。

不要根据什么是&#34;更好,&#34;来看待它。你不会以这种方式思考。两者都是必要的。依赖项属性是获取/设置依赖项对象的可观察属性的方式。使用相应的属性访问这些属性可以更轻松地使用代码。

如果您不需要通过代码访问这些依赖项属性,那么我想您可能会认为不需要这些属性,但 nobody 会想要使用它。