回复: Silverlight技巧/诀窍: 创建和使用Silverlight和WPF 用户控件
将地址对象数据绑定到AddressUserControl至此,我们有了一些用户控件封装了了地址UI,让我们来创建一个Address数据模型类,我们可以用来数据绑定到用户控件上。我们将定义象下面这样的类(利用了新的
自动属性的语言特性):

附件:
您所在的用户组无法下载或查看附件 然后在我们的Page.xaml文件的后台代码文件中,我们可以生成我们的Address类的2个实例,一个为运输地址,另一个为结帐地址(为这个例程的目的,我们将在地址对象中填充伪数据)。然后我们将通过编程手段将地址对象绑定到页面上的AddressUserControl控件上去,我们这样做,把每个用户控件的“DataContext”属性设成合适的运输或结帐数据模板实例:

附件:
您所在的用户组无法下载或查看附件 最后一步是用声明的方式在 AddressUserControl.xaml 文件中加一个{Binding}语句,用来配置用户控件中的TextBox控件的Text属性和绑定到用户控件上的Address数据模型对象的属性间的双向数据绑定关系。

附件:
您所在的用户组无法下载或查看附件当我们点击F5运行应用时,我们将得到Address数据模型对象与AddressUserControl的自动数据绑定:

附件:
您所在的用户组无法下载或查看附件因为我们将{Binding}声明设置成了“Mode=TwoWay”,用户在文本框中做的改动会自动地推送到Address数据模型对象中去(不用写任何代码就可实现)。

附件:
您所在的用户组无法下载或查看附件例如,我们可以将浏览器中原先的运输地址改成送到迪斯尼:
假如我们在Save按钮的Click事件处理函数中加一个断点,然后点击按钮的话,我们可以看到上面的文本框的变动是如何自动反映到我们的“_shippingAddress”数据模型对象的:

附件:
您所在的用户组无法下载或查看附件 然后我们可以实现 SaveBtn_Click 事件处理函数,将运输和结帐Address数据模型对象按我们的方式持久化,而不用手工获取或对页面上的UI控件做什么操作。
WPF和Silverlight支持的这个干净的视图/模型分离使得后期改动地址用户控件极其容易,且不必更新页面中的任何代码,它还使得轻松地对功能进行单元测试成为可能(请阅读我最新的贴子了解
Silverlight单元测试的详情)。
结语WPF和Silverlight方便你将UI功能封装进控件,它们支持的用户控件机制就提供了一个非常容易的方式。用户控件与数据绑定的结合促成了一些很好的视图/模型分离场景,允许你在操作数据时编写非常干净的代码。
如果你想在自己的机器上运行的话,你可以在
这里下载上面例程的完整版本。
想进一步了解Silverlight和WPF的话,请参阅我的
Silverlight教程和链接网页。 我还高度推荐Karen Corby在MIX08上做的精彩讲座(讨论了用户控件,自定义控件,样式化,控件模板等),你可以在
这里免费在线观看该讲座。
希望本文对你有所帮助,
Scott