在屏幕上存储各种ui元素数据的最佳方法

时间:2013-03-14 12:00:33

标签: wpf

我正在开发一个图表工具,我将控件拖放到图表表面,就像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.  

当我创建的图表作为应用程序运行时,必须为装载器存储的这些元素检索适当的数据。

加载器逻辑可能会像这样

对于图上的所有元素

  1. 检测元素ID和元素类型
  2. 获取上述ID的数据。
  3. 我认为是资源的xml。但我的经理似乎并不热情。

    我想知道最有经验/最熟练的wpf开发人员会如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

我可能完全不了解你的问题。但是我们将业务数据存储为自定义二进制格式,这基本上只是我们业务数据树的属性值转储到数据库中。根据您的要求,您需要确保处理文件格式(不同版本)的更改并正确处理交叉引用。每个对象都是自己转储的,第二次传递确保交叉引用被解析。

除此之外,我会尽量简单:

每种图表元素的模型类,它本身只存储业务相关数据(我会将图表应用程序中的位置和大小视为业务数据)。这些模型可以制作Serializable。 Manager类可以在这些模型上运行,具有undo redo,视图模型创建等。 并查看包装这些模型并存储其他内容的模型,如命令,ui信息(选择,扩展等)。

对于视图,我强烈建议使用虚拟化画布创建自定义ItemsControl。

答案 1 :(得分:0)

我认为这取决于规模。如果您有数千个对象,这些对象需要保存/加载,您最好设置一个数据库,您将在其中存储数据。如果只有几十个对象--XmlSerialization是最明显的选择。

答案 2 :(得分:0)

我认为XML不是一种糟糕的方式。事实上,这是Office子元素的存储方式。看看微软的XPS Packaging格式和API。 (MSDN