关于XML数据绑定的WPF建议:XmlDataPresenter vs自定义类?

时间:2010-01-20 22:57:36

标签: c# .net wpf xml data-binding

我刚刚开始使用WPF,我正在构建一个简单的电影库作为测试项目来帮助我找到自己的脚。

我将我的电影信息存储在XML中,例如:

  <movie id="1" title="Back To The Future" date="1985" ... />

电影显示在列表中,点击后字段将变为可编辑状态。我通过使用两个数据模板来设置列表项的样式,通过ListBoxItem.IsSelected属性上的Trigger应用。

但是对于绑定和编辑数据,我真的很感激一些建议。我尝试了以下各种方法,取得了不同程度的成功。你觉得哪个最有意义?还有其他我可以试试的东西吗?

方法1:在XAML中使用XMLDataProvider直接绑定到XML。在这种情况下,ListBox绑定到XmlDataProvider,并且各个控件元素通过XPath表达式绑定。入门非常简单,但在编辑数据时这种方法似乎变得棘手。我们需要相当多的ValueConverters才能确保数据以合理的格式呈现并以适当的格式保存回XML文件。

方法2:创建一个接收XML的自定义Movie类,并将所有影片属性公开为控件绑定到的公共属性。这感觉更强大和灵活,但似乎需要更多的工作来实现。每个属性都需要在代码中明确公开,验证是一种痛苦。

方法3:有点像方法2,但使用Movie用户控件而不是ListBox +数据模板。我从这开始并迅速放弃它,因为我看不出方法2的任何优势。

我意识到这不是一个直截了当的问题,而且有很多因素需要考虑,但是对各种利弊的想法(或者我是否缺少任何技巧)都会受到赞赏。如果您想了解更多信息或代码示例,请与我们联系。如果这个问题不合适或不受欢迎,请道歉。

非常感谢。

1 个答案:

答案 0 :(得分:0)

如果它只是用于显示,无论你是否使用模板,接近一个更有效,因为wpf引擎直接使用xml。

如果您要对数据进行编辑操作,最好采用方法二,因为您可以更灵活地操作数据。使用类可以执行与方法1中完全相同的操作,因为引擎将像xml文件一样从对象中读取。这种方法允许轻松地绑定元素2方式,如果它来自IObservable Collection,你可以改变数据被更改时调用的方法,因此它更新了xml。