我正在开发一个图表工具,我将控件拖放到图表表面,就像VS或visio或paint一样。
在表面上删除的每个控件/元素在右键单击时将显示上下文菜单“属性”。 “属性”对话框将显示与每个元素/控件相关的一组数据。
我的问题是如何最好地存储/加载附加到表面上每个元素/控件的非UI数据。
例如我在设计模式中创建元素LED1,断路器1,连接器1.我将具有存储
每个人的不同数据集。
存储逻辑将是这样的
for all elements on diagram
1. input element id,element type.
2. store data for that element ID.
当我创建的图表作为应用程序运行时,必须为装载器存储的这些元素检索适当的数据。
加载器逻辑可能会像这样
对于图上的所有元素
我认为是资源的xml。但我的经理似乎并不热情。
我想知道最有经验/最熟练的wpf开发人员会如何解决这个问题。
答案 0 :(得分:1)
我可能完全不了解你的问题。但是我们将业务数据存储为自定义二进制格式,这基本上只是我们业务数据树的属性值转储到数据库中。根据您的要求,您需要确保处理文件格式(不同版本)的更改并正确处理交叉引用。每个对象都是自己转储的,第二次传递确保交叉引用被解析。
除此之外,我会尽量简单:
每种图表元素的模型类,它本身只存储业务相关数据(我会将图表应用程序中的位置和大小视为业务数据)。这些模型可以制作Serializable。 Manager类可以在这些模型上运行,具有undo redo,视图模型创建等。 并查看包装这些模型并存储其他内容的模型,如命令,ui信息(选择,扩展等)。
对于视图,我强烈建议使用虚拟化画布创建自定义ItemsControl。
答案 1 :(得分:0)
我认为这取决于规模。如果您有数千个对象,这些对象需要保存/加载,您最好设置一个数据库,您将在其中存储数据。如果只有几十个对象--XmlSerialization是最明显的选择。
答案 2 :(得分:0)
我认为XML不是一种糟糕的方式。事实上,这是Office子元素的存储方式。看看微软的XPS Packaging格式和API。 (MSDN)