2016-05-31 28 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#一樣,並遵循普通的屬性存取器習慣用法,那麼將其轉換爲正確的類型,然後直接設置該屬性將更具可讀性和可維護性。是的,它增加了鑄造的額外操作,然後調用屬性設置器。但這些成本微不足道,實際上不可估量。作爲回報,你會得到不承擔任何特定實現的代碼。