[转载]在程序代码中使用DataTemplate的另类方法

看到博客园有篇文章谈到“使用C#编程的方式创建DataTemplate数据模板”(原文地址), 博主的做法是创建一个FrameworkElementFactory对象,设置好后将其设置为DataTemplate对象的VisualTree属 性。我认为此方法有待商榷,盖因查阅MSDN,发现FrameworkElementFactory类的介绍页面上有一段备注:
(http://msdn.microsoft.com/zh-cn/library/system.windows.frameworkelementfactory.aspx)

  备注:通过此类以编程方式创建模板这种方式已被否决,这些模板是 FrameworkTemplate(如 ControlTemplate 或 DataTemplate)的子类;使用此类创建模板时,并非所有模板功能都可用。以编程方式创建模板的推荐方式是:使用 XamlReader 类的 Load 方法从字符串或内存流中加载 XAML。


  因此,正确的做法似乎是编程创建一段XAML代码并且使用XamlReader类的Load方法将其构造成为实例对象。下面代码展示了这一做法(为了演示,数据绑定操作全部由C#代码而不是xaml完成):

  下面代码完成一个小程序,该程序可以输入名字和昵称,将之加入到ListBox列表中,如果选中ListBox某一项,输入框内容会实时更新,也可以实时修改名字和昵称。首先使用XAML描述出程序界面:

MainWindow.xaml:

下面将TextBox、ListBox的数据源全部绑定到我们自己的数据结构上,先定义一个NickName类,实现INotifyPropertyChanged接口:

MainWindow.xaml.cs:

下面代码在内存中使用XAML定义了一个DataTemplate,并将之实例化,完成了ListBox的数据绑定操作:

MainWindow.xaml.cs:

通过上述代码,已经成功使用C#代码创建了DataTemplate数据模板,并完成了这个小程序:

由于刚开始学习WPF,代码中难免有不当之处,恳请牛人指正。

posted on 2011-09-21 16:33  guoxuefeng  阅读(378)  评论(0编辑  收藏  举报