【发布时间】:2024-09-27 14:55:01
【问题描述】:
我正在开发一个用于修改特定类型的二进制文件格式的项目。规范的一部分是允许结构布局的 XML 定义,如下所示:
<!-- Invalid plugin, for demonstration only -->
<plugin name="weap">
<struct size="0x504">
<float32 name="initial_rounds_per_second" offset="0x4" />
<float32 name="final_rounds_per_second" offset="0x8" />
<float32 name="rounds_per_second_acceleration" offset="0xA" />
<float32 name="rounds_per_second_deceleration" offset="0xC" />
<uint16 name="projectiles_per_shot" offset="0x6E" />
<array name="magazines" offset="0xF0">
<struct size='112'>
<uint16 name="rounds_recharged" offset="0x4" />
<uint16 name="rounds_total_initial" offset="0x6" />
<uint16 name="rounds_total_maximum" offset="0x8" />
<uint16 name="rounds_loaded_maximum" offset="0xA" />
</struct>
</array>
</struct>
</plugin>
这些 XML 插件在运行时加载并用于解释二进制文件。我在 Python 中有一个工作原型,它在运行时解释这些插件并基于它们生成类。
我的麻烦在于 WPF 数据绑定——WPF 需要知道它将在编译时绑定到的属性的名称。我想将 WPF GUI 数据绑定到这些插件定义的数据结构,所以我有点麻烦。
如何将数据绑定到直到运行时才知道名称的属性?
我能想到的唯一暂定解决方案是将所有这些信息存储在 Dictionary<String,Object> 类型的“字段”属性中,其中字符串 => 对象映射表示命名元素。然后 WPF 可以绑定到这个字典,使用数据模板列出每个键/值对。
但是,我对 WPF 的缺乏经验让我陷入了困境,我的解决方案引发了许多其他问题:
- 这种字典方法是解决问题的好方法吗?
- 我应该使用哪种可观察数据类型?
- 如果字典中的一个值被更新,WPF 是否需要刷新整个集合?
- 如果字典包含数百个键/值对,我会遇到性能问题吗?
【问题讨论】:
标签: c# wpf data-binding ironpython