我很难找到最好的方法来处理具有动态数据更新的WPF应用程序。我是否应该使用WPF提供的丰富数据绑定?
在下面的讨论中,我将尽可能地简化我的问题域,并简要地提到一些解决方案。我对这个社会所能提供的任何意见都很感兴趣。
简化问题域:假设您有一个拥有大约1,000个条目的系统,每个条目都有一个唯一的“名称”,以及一个动态的“速度”和“位置”。这些项的数据每秒更新60倍。您希望在各种UI中向用户显示这些数据--从“显示数字的标签”到图形刻度盘/米/量规/等等。这是WPF的完美工作--将可视化与应用程序的其他部分分开。你将如何设计这个系统?
我的第一个解决方案:我的第一个解决方案是定义一个具有速度和位置属性(双倍)的对象,称为“DataItem”,定义一个具有名称属性(string)的接口。显示数据的控件必须实现名称接口,创建了一个“DataManager”,用于扫描实现该接口的FrameworkElements,在初始化时生成一个名称/框架工作元素对列表。然后,每秒60次更新1,000 DataItems的列表,并将每个匹配FrameworkElement的DataContext设置为DataItem对象。这是可行的,性能是可以接受的(特别是如果数据并不总是在变化的话)。
我的第二个解决方案解决了第一个解决方案中的UI控件都必须实现一些接口- yuk的问题。我想使用开箱即用的未经修改的WPF控件(在某些情况下)。因此,第二个解决方案是定义一个“附加属性”(我把它放在DataManager对象上),这样您就可以在xaml中做一些类似的事情
<Label DataManager.Name = "objectname" Content="{Binding}" />不知何故,这个解决办法似乎仍然不正确。我的第三个解决方案是研究如何实现自定义DataSourceProvider。我没有成功。我无法了解数据源提供程序模型,以及在这种情况下如何使用它。
现在,我正在查看由Microsoft发布的CodePlex“动态数据显示”项目。这个项目的全部内容是绘制/绘制动态数据,但可能会有一些想法。所以我现在在StackOverflow上--通常是一个简短的问题和快速回答的地方。:-)
我对WPF非常陌生,希望大家对这些问题有任何想法。请记住这里指定的问题域是简化的,所以我需要一个健壮的解决方案。实际上有许多不同类型的数据对象,每个对象都有不同的属性;每个对象的数据更新速度不一样,UI控件显示单个项和项组,数据来自多个源,等等。
发布于 2008-12-13 17:08:35
你快到了。您希望在两个级别上进行数据绑定。
首先-让您的_DataItem_s实现INotifyPropertyChanged,或者让它们从DispatchingObject派生,并实现要绑定到的每个值的依赖项属性。
第二,将所有的_DataItem_s保存在ObservableCollection<DataItem>或DataTable中。您需要一个支持INotifyCollectionChanged或IBindingList的集合。
第三,使用某种容器控件(列表框、第三部分网格控件等)将_DataItem_s列表绑定到应用程序。
第四,定义一个DataTemplate,以使每个_DataItem_s都具有直观的外观。
第五,如果需要,可以使用DataTemplateSelector动态地为不同类型的_DataItem_s选择DataTemplate。
这里有一个最小的xaml来让你开始
<ListBox ItemsSource="{Binding ...}" ItemTemplateSelector="{StaticResource DTSelector}">https://stackoverflow.com/questions/365378
复制相似问题