在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. 无法解析属性(复杂属性)
- 4. XML属性为“复杂属性”
- 5. WPF简单绑定到对象属性
- 6. XSD:复杂类型属性?
- 7. Magento中的复杂属性
- 8. Silverlight:绑定复杂属性
- 9. 反射和复杂属性
- 10. 复杂性类的属性P
- 11. ReactiveCocoa简单的属性与SWIFT
- 12. WPF DataTrigger与.Net属性
- 13. 在C#模型中使用复杂类型与单独属性
- 14. 简单的依赖属性?
- 15. WPF PreferredSize属性?
- 16. 简明属性
- 17. jQuery的 - 属性与属性
- 18. WPF绑定新复杂类型的多个属性
- 19. 角2复杂的属性绑定
- 20. Sum复杂的JavaScript对象属性
- 21. 将TextBlock绑定到复杂属性
- 22. MVC ModelState验证复杂属性列表
- 23. 复杂必需属性对象
- 24. 复杂属性的XSL转换
- 25. Automapper,复杂的属性和继承
- 26. 角2复杂的内插属性
- 27. LINQ复杂的查询导航属性
- 28. Sharepoint中的复杂映射属性
- 29. 复杂的附加属性行为
- 30. 将复杂属性绑定到DataGridView Win.Forms
请举一个例子 – Ozan 2010-07-16 10:18:50