我正在自学WPF,我遇到了一个我无法找到答案的小问题。
我的测试应用程序允许将图像文件放入StackPanel。删除图像后,会向堆栈添加新的用户控件,并显示有关该文件的一些元数据。一切正常,我可以遍历子控件来检索值。
我希望能够做的是允许用户将此数据保存到文件中,以便他们可以暂停处理数据。对我来说,显而易见的方法是将数据存储在DataTable中,并将其序列化/反序列化为xml。但是,我不知道如何从DataTable或DataSet对象驱动用户控件的集合 - 事实上,我甚至不知道这是否是在WPF应用程序中进行此操作的正确方法。如果有的话,我非常愿意承认我的无知,并提出更好的建议。
应用逻辑摘要。
1)文件被丢弃(从Win explorer)到StackPanel上 2)文件触发创建新的用户控件,该控件被添加到StackPanel中 3)数据填充在用户控制中 4)处理数据涉及遍历控件集合。
我想要什么
1)文件被丢弃(从Win explorer)到StackPanel上 2)文件数据被插入到一些可持久的对象(数据表?)中 3)更新的数据表驱动将要添加到显示的集合中的用户控件的生成 4)保存/加载功能将数据保留在以后重新使用。
提前致谢
答案 0 :(得分:3)
你使用第二种方法走在正确的轨道上,你需要注意的是ItemsControl - 这是一个可以添加项目的东西。它是ListBox等的基础,你可以template it to work as you require。然后是DataTemplate,当项目被添加到底层数据结构时,它处理显示哪些控件以及数据绑定到那些控件。网上有很多例子,试试Dr WPF。
为了使一切工作,底层数据结构必须支持更改通知。由于一切都是自动发生的,一旦设置了Xaml,你就会发现自己处于一种奇怪的境地。您已将数据添加到数据结构,这反过来又导致控件和数据出现在ItemsControl中。如何链接数据项及其可视控件。答案是使用一些内置的静态方法ItemFromContainer,它们从图形链接到底层数据项,对处理点击事件很有用,而ContainerFromItem则反过来。