在WPF中,最好創建一個屬性「複雜」(即類型爲「可見性」)或屬性簡單(即類型爲布爾型),然後使用轉換器綁定屬性?第一種方法寫得較短,但我不知道什麼是更好的表現。WPF簡單屬性與複雜屬性
回答
使用轉換器的性能受到的影響可以忽略不計。但是,您應該根據自己的選擇確定實施該屬性的位置。
A Visibility
屬性只對UI層(自定義控件或可能是視圖模型)中的類有意義。如果你在模型類上創建一個屬性,剛剛發生驅動你的用戶界面在這種情況下,使用布爾和轉換器會更有意義。
編輯:加入(略做作)例如
例如,假設你有稱爲Foo
可編輯對象數據類(模型),和一個Foo
可以是「簡單的」或「先進。 「 「高級」Foo
將在UI中顯示額外的編輯控件 - 因此我們需要將高級編輯面板的Visibility
屬性綁定到某個屬性。
您的Foo
類可能有一個屬性來指示它是否先進。該屬性應該肯定是一個布爾值 - 不是Visibility
- 因爲你的Foo
類不應該關心顯示它的UI的任何細節。所以布爾型Foo.IsAdvanced
將是一個合適的屬性。
在這種情況下,您可以直接綁定到Foo.IsAdvanced
並使用轉換器。你明確不要想做的是創建一個Visibility
屬性Foo.AdvancedEditControlVisibility
,因爲Foo
應該是後端數據類。
如果你想創建一個不需要轉換器的屬性,你應該創建一個屬性在一個更高的類中,一個屬於你的UI。有些體系結構模式會將其稱爲「ViewModel」類 - 它是一種以數據更適合UI顯示的方式呈現模型的類。因此,您可以創建一個需要Foo
的類,並根據的Foo.IsAdvanced
的值顯示AdvancedEditControlVisibility
屬性。
在這種情況下,您可以直接綁定到視圖模型上的屬性,無需轉換器。請注意,最終你已經完成了轉換 - 你只是將它作爲代碼的一個更明確的部分,而不是侷限於標記。
這裏的思考過程是viewmodel是一個「更高級別」的類 - 一個包裝你的數據類,包括UI特定的邏輯 - 所以更適合包含特定於你的UI的代碼。理想情況下,您應該輪流進行每個類的項目並確保其具有特定目的:如果Foo
是一個用於存儲數據的業務對象,爲什麼它應該公開(甚至關心!)某些項目的可見性UI用來顯示它?如果您將Foo
放入命令行應用程序或Web應用程序中,會發生什麼情況?如果您在業務類中使用了WPF-UI特定的邏輯,那麼您的封裝是錯誤的 - 但以這種方式分離問題是有時需要解決的最困難的事情之一。
性能方面你會發現幾乎沒有區別。:-)
如果問題是關於性能的話,那麼第一個選項在第二個選項中的速度可以忽略不計,因爲後者涉及裝箱/取消裝箱。
但是,建議您使用converters
或DataTriggers
來確定屬性Data-Oriented並相應地更改視圖。
我不認爲這兩個選項中的任何一個都會有主要的性能問題。 更重要的是誰將是該物業的最終用戶。
在我的項目中,我們在屬性網格中向用戶顯示這些類型的屬性;因此具有布爾屬性更有意義,因此它顯示爲用戶的複選框。
如果我們使用Visibility
屬性,那麼它將顯示爲具有可見,隱藏和摺疊選項的組合框。這可能會讓非技術用戶感到困惑。如丹說的 - 如果你的屬性是在viewmodel /表示層中聲明的,只有你將在視圖(xaml或代碼)中使用這個屬性,那麼擁有複雜屬性更有意義。所以你可以直接綁定。但如果你正在做其他地方說你的BL,那麼把它作爲bool
更有意義。
- 1. Silverlight簡單和複雜的屬性
- 2. 複雜屬性3.2.12
- 3. XML屬性爲「複雜屬性」
- 4. 無法解析屬性(複雜屬性)
- 5. WPF簡單綁定到對象屬性
- 6. Ember複雜屬性綁定
- 7. AutoMapper複雜的ViewModel屬性
- 8. 複雜屬性UML圖
- 9. XSD:複雜類型屬性?
- 10. Magento中的複雜屬性
- 11. Silverlight:綁定複雜屬性
- 12. 反射和複雜屬性
- 13. 複雜性類的屬性P
- 14. 通過SCIM端點添加複雜屬性作爲wso2Extension的另一個複雜屬性的子屬性
- 15. WPF DataTrigger與.Net屬性
- 16. ReactiveCocoa簡單的屬性與SWIFT
- 17. 在C#模型中使用複雜類型與單獨屬性
- 18. 簡單的依賴屬性?
- 19. WPF PreferredSize屬性?
- 20. 簡明屬性
- 21. 綁定到WPF屬性的屬性
- 22. c#wpf IValueConverter和屬性屬性
- 23. jQuery的 - 屬性與屬性
- 24. Backbone.js - 屬性與屬性
- 25. WPF綁定新複雜類型的多個屬性
- 26. WPF datagrid綁定複雜類型屬性back
- 27. Sharepoint中的複雜映射屬性
- 28. 複雜屬性的XSL轉換
- 29. 角2複雜的屬性綁定
- 30. 角2複雜的內插屬性
請舉一個例子 – Ozan 2010-07-16 10:18:50