2016-05-31 26 views
1

我有一个属性更改回调,并在其中我需要执行一些验证。DependencyObject.SetValue与铸造和设置属性

我将获取一个新值并根据一组其他属性标准(如最小值和最大值)对其进行验证。

要做到这一点,我打算从变化的事件要么采取的依赖对象,并使用

DependencyObject.SetValue(TargetProperty,NewValue); 

或将它转换为一个变量,使用属性直接

ObjectType myObjectType = (ObjectType)DependencyObject; 
myObjectType.Target=NewValue; 

我的问题是使用这两种方法的原因是什么?比起大量的SetValue/GetValue查找等,铸造是否会耗费资源?我将在方法中最多引用属性10次。

非常感谢。

+0

我想看看[这个MS链接](https://msdn.microsoft.com/en-us/library/ms752914)关于DP以及如何编写它们。我看不出有什么理由像你这样写他们...... –

回答

1

DependencyObject中依赖项属性的标准实现是调用SetValue()。此外,浇铸成本低廉,特别是在这种情况下。所以这两种方法之间确实没有实际的区别。

对我来说,这将归结为您想要关注的操作的哪一部分。如果你希望你的实现与事实上密切相关,事实上这个对象实际上是一个DependencyObject,我看不到有很多理由避免直接调用SetValue()。这就是WPF所做的。另一方面,如果您希望代码更像C#一样,并遵循普通的属性存取器习惯用法,那么将其转换为正确的类型,然后直接设置该属性将更具可读性和可维护性。是的,它增加了铸造的额外操作,然后调用属性设置器。但这些成本微不足道,实际上不可估量。作为回报,你会得到不承担任何特定实现的代码。