2009-02-13 54 views
0

我正在教自己的WPF过程中,并且遇到了一个我找不到答案的小问题。WPF将DataTable绑定到重复的用户控件

我的测试应用程序允许将图像文件放入StackPanel。一旦图像被丢弃,一个新的用户控件被添加到堆栈中,并显示一些关于该文件的元数据。所有工作正常,我可以通过子控件迭代来检索值。

我希望能够做的是允许用户将这些数据保存到一个文件中,以便他们可以暂停处理数据。我这样做的一个显而易见的方法是将数据存储在DataTable中,然后将它串行化/反序列化为xml。但是,我不知道如何从DataTable或DataSet对象中驱动用户控件的集合 - 实际上,我甚至不知道这是否是在WPF应用程序中使用它的正确方法。我非常愿意在这里承认我的无知,并且如果有任何更好的建议。

应用逻辑摘要。

1)文件(从运资源管理器)滴到一个StackPanel
2)文件触发一个新的用户控制,其被添加到的StackPanel
3)数据在用户控制被填充的创建
4 )处理数据涉及遍历控件集合。

我想什么

1)文件(从运浏览器)到一个StackPanel
2)文件数据插入到一些持久化对象(数据表中删除?)
3)更新后的数据表驱动要生成的用户控件添加到显示的集合中。
4)保存/加载功能保留数据以供稍后重新使用。

在此先感谢

回答

3

你在正确的轨道上第二个方法,你需要了解一下什么是ItemsControl的 - 这是它可以有项目添加到它的事情。这是ListBox等的基础,你可以template it to work as you require。然后有一个DataTemplate处理当一个项目被添加到底层数据结构时显示哪些控件和数据绑定到这些控件。网上有不少例子,试试Dr WPF

为了使一切正常工作,基础数据结构必须支持更改通知。当所有事情都自动发生时,一旦Xaml被设置,你就会发现自己处于一种奇怪的状态。您已将数据添加到数据结构中,这反过来又导致控件和数据出现在ItemsControl中。你如何链接数据项目和他们的视觉控制。答案是使用一些内置的静态方法ItemFromContainer,它从图形链接到您的基础数据项,对处理点击事件很有用,而ContainerFromItem则反过来。