发新话题
打印

WPF开发感悟

WPF开发感悟

UI层与逻辑层要尽可能地剥离(解耦)。
Routed Event和Command比Event的耦合度要低。
UI层与逻辑层的“血管”是数据关联(Data Binding)。
尽量不要试图通过UI层去拿数据或者操作数据,而是直接去操作数据源。例如:
想对一个TreeView里的结点排序,不应该是对TreeViewItem排序,而是应该对TreeView的DataSource排序
TreeView的Item是CheckBox,想把这些CheckBox认为选中,不应该从UI下手,而是把与CheckBox相关联的数据设为true
想得到ListView(内嵌GridView)中的数据,不要使用VisualTree去找来找去,而是应该去访问ListView的DataSource
数据关联的核心思想是:数据决定UI。UI的作用是Update数据。比起Windows Form,WPF的UI作用淡化了很多。


"UI的作用是Update数据"——严重反对!
UI的主要作用是展示数据(Presentation)。UI并不更新数据,仅仅只是获得用户的输入。

“数据决定UI”——并不太理解你说的这句话是什么意思。有时候data和ui的关系并不是那么紧密,同样的data,ui完全可以选择不同的呈现方式。MVC/MVP中的view都是可以更换的,为什么要说data决定UI呢?

观点3、4、5都是基于“使用数据绑定”这个前提的,微软提供了这种简便的方式,然而它并不是那么灵活。


"UI是用来更新数据源的"——UI不更新数据源,它发生变化之后会通过事件来告诉BindingManager,后者保持UI和数据源的同步。

"如果我想让你对里面的子结点排序,你怎么做呢?这时候,你只能对XML文件(使用DOM)来排序,这时候,UI上的结点自然就排好序了。这就是我所说的“数据决定UI”。"——这实际上是你用DataBinding所带来的问题,你只能顺从它读取数据的方式。为了简化问题,假设这里的数据源是一个数组,你可以用DataBing把它绑到一个ListBox上,但是请问你怎么把它绑到一个TreeView上(先序遍历,中序遍历。。或者是堆)?难道你要把这个数组转成Hierarchical Data ,然后绑定?我们自己完全可以按照树或堆遍历的算法来读取一个数据,生成节点,并放到TreeView中去。

这是很自由的,对于同样的数据,我们可以从头到尾显示,从尾到头显示,还可以从中间开始显示。。。

TOP

发新话题