我在处理一个具有动态数据更新的WPF应用程序时遇到了困难。我应该使用WPF提供的丰富数据绑定吗?
在下面的讨论中,我将尽可能简化我的问题领域,并简要介绍一些解决方案。我非常感兴趣这个社区能够提供的任何意见。
简化的问题领域: 假设你有一个系统,约有1,000个项目,每个项目都有一个唯一的“名称”,以及一个动态的“速度”和“位置”。这些项目的数据每秒更新60次。您希望在各种UI中向用户显示这些数据 - 从“显示数字的标签”到图形表盘/计量表/仪表等等。WPF的完美职责 - 将视觉效果与其余应用程序分离。您将如何设计此系统?
我的第一个解决方案: 我的第一个解决方案是定义一个带有速度和位置属性(double)的对象,称为“DataItem”,定义一个带有名称属性(字符串)的接口。显示数据的控件必须实现名称接口,创建了一个“DataManager”,该管理器扫描实现接口的FrameworkElements,构建了一个包含名称/FrameworkElements对的列表初始化时间。然后,每秒60次更新1,000个DataItems的列表,并将每个匹配的FrameworkElement的DataContext设置为DataItem对象。这个解决方案有效,性能可以接受(特别是如果数据不总是改变)。
我的第二个解决方案解决了第一个解决方案中UI控件都必须实现某些接口的问题 - 恶心。我想在某些情况下使用开箱即用的未修改WPF控件。因此,第二个解决方案是定义了一个“附加属性”(我将其放在DataManager对象上),这样您就可以在xaml中执行诸如
<Label DataManager.Name = "objectname" Content="{Binding}" />
一些解决方案似乎仍然不太对。我的第三个解决方案是尝试实现自定义的DataSourceProvider,但我没有成功。我无法理解数据源提供程序模型以及在这种情况下如何使用它。
目前,我正在查看由Microsoft Research发布的CodePlex“动态数据显示”项目。该项目专注于绘制/图形化动态数据,但其中可能会有一些想法。所以我来到了StackOverflow - 通常是一个提问简短、回答迅速的地方。 :-)
我非常新于WPF,并且希望任何人都能就这些问题提出想法。请记住,此处指定的问题域是简化的,因此我需要一个强大的解决方案。实际上有许多不同类型的数据对象,每个对象都具有不同的属性;并且数据更新的速度对于每个对象都不同,UI控件显示单个项和组项,数据来自许多来源等等。