2015-11-05 37 views
1

DependencyObjects可以使用SetValue(),並且大多數(如果不是全部)WPF的庫存UIElement派生控件包含DependencyObject屬性,則可以通過SetValue進行設置。有時在WPF應用程序中執行代碼隱藏是實際的。以下產生類似的結果。但哪一個更好?DependencyObject SetValue vs屬性訪問器

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

並設置Text屬性可以通過兩種方式完成。

myTextBlock.Text = "foo"; 

OR

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

也許不同的是微不足道的,但我很好奇,是否存在使用一個比其他的優勢。

回答

0

第二個有輕微的性能提升*,因爲TextBlock.Text集的實現實際上是return this.SetValue(TextBlock.TextProperty, value);

然而,應該指出的是,有可能獲得第二個執行錯誤的,例如,你可能最終會打字

myTextBlock.SetValue(Grid.ColumnProperty, "foo"); 

這將編譯,但可能不能運行(或者至少沒有產生預期的結果)。

此外,前者會給你以後不會給的類型安全。

*然而,「性能提升」應該被拋出。

0

具有實際屬性的依賴屬性本質上是通過代碼獲取或設置這些屬性的方便。所有依賴對象的所有依賴屬性都由鍵/值的「字典」支持。這些值可通過GetValue()SetValue()方法訪問。

什麼是「更好」取決於您打算如何使用這些屬性。所有內置控件都定義了屬性,以便通過代碼更容易地初始化對象。如果您使用Get/Set方法嘗試相同的方法,則會變得更加複雜。

不要從什麼是「更好」的角度來看待它,你會以這種方式無處思考。兩者都是必要的。依賴項屬性是您如何獲取/設置依賴項對象的可觀察屬性。通過相應的屬性使這些屬性可訪問,可以更輕鬆地使用代碼

如果您不需要通過代碼來訪問這些依賴屬性,那麼我想你可以爭辯說,性是不需要的,但當時沒有人要使用它。

+0

傾向於代碼隱藏,也許綁定在其他地方。前者用於處理一些小事件以避免虛擬機中添加代碼。這是意圖。 – tgpdyk