代码之家  ›  专栏  ›  技术社区  ›  Bill

在WPF中显示动态数据的好方法是什么?

  •  8
  • Bill  · 技术社区  · 17 年前

    我正在努力寻找处理具有动态数据更新的WPF应用程序的最佳方法。我是否应该使用WPF提供的丰富数据绑定?

    在下面的讨论中,我将尽可能简化我的问题域,并简要提及一些解决方案。我对这个社区能提供的任何评论都很感兴趣。

    简化问题域 : 假设你有一个大约有1000个项目的系统,每个项目都有一个唯一的 名称 ,以及动态 速度 位置 这些项目的数据每秒更新60次。您希望在各种UI中向用户显示这些数据,从显示数字的标签到图形表盘/仪表/量规等。WPF的完美工作是将视觉效果与应用程序的其他部分分开。你会如何设计这个系统?

    我的第一个解决方案 : 我的第一个解决方案是定义一个具有速度和位置属性(double)的对象,称为 数据项 ,定义一个接口 名称 属性(字符串)。显示数据的控件必须实现名称接口,创建了一个DataManager,用于扫描实现该接口的FrameworkElements,并在初始化时构建了一个名称/FrameworkElements对的列表。然后,每秒更新60次1000个DataItems的列表,并将每个匹配的FrameworkElement的DataContext设置为DataItem对象。这奏效了,性能是可以接受的(特别是在数据并不总是变化的情况下)。

    我的第二个解决方案解决了第一个解决方案中的UI控件都必须实现一些接口yuk的问题。我想使用开箱即用的未修改的WPF控件(在某些情况下)。所以,第二个解决方案是定义一个Attached属性(我把它放在DataManager对象上),这样你就可以在xaml中执行以下操作

    <Label DataManager.Name = "objectname"  Content="{Binding}" />
    

    不知何故,这个解决方案似乎仍然不正确。我的第三个解决方案是考虑实现一个自定义的DataSourceProvider。我没有成功。我无法理解数据源提供者模型,以及在这种情况下如何使用它。

    现在,我正在查看微软研究院发布的CodePlex动态数据显示项目。该项目旨在绘制动态数据,但其中可能存在一些想法。所以我在StackOverflow上,通常是一个有简短问题和快速答案的地方。 :-)

    我是WPF的新手,如果有人对这些问题有任何想法,我将不胜感激。请记住,这里指定的问题域是简化的,所以我需要一个健壮的解决方案。实际上有许多不同类型的数据对象,每种都有不同的属性;每个对象的数据更新速率不同,UI控件显示单个项目和项目组,数据来自许多来源等。

    1 回复  |  直到 17 年前
        1
  •  7
  •   Scott Weinstein    17 年前

    你快到了。您希望在两个级别进行数据绑定。

    首先,有你的 数据项 s实施 INotifyPropertyChanged 或者让它们从 DispatchingObject 并为要绑定的每个值实现依赖属性

    第二,保留你所有的 数据项 s在其中之一 ObservableCollection<DataItem> 或DataTable。你需要一个支持 INotifyCollectionChanged IBindingList .

    第三,使用某种容器控件(列表框、第三方网格控件等)绑定列表 数据项 s到你的应用程序

    第四,定义 DataTemplate 给每一个 数据项 这是一种视觉效果

    第五,如果需要,使用 DataTemplateSelector 为不同类型的数据动态选择数据模板 数据项 s

    这里有一个简单的xaml来帮助你开始

    <ListBox ItemsSource="{Binding ...}" ItemTemplateSelector="{StaticResource DTSelector}">