實時源
RealTimeSource組件旨在顯示少量快速變化的數據,同時保持用戶界面的響應性。
提示:RealTimeSource可以有效地處理不超過幾百條數據記錄的數據源。
下面的動畫演示了使用RealTimeSource綁定到動態數據的GridControl。

如果數據源中的記錄經常更新(例如,每秒更新20,000次),您應該考慮使用RealTimeSource組件。
使用帶有靜態數據的RealTimeSource不會帶來任何性能改進。
提示:RealTimeSource是數據感知控件和實際數據之間的一層。
在決定在應用程序中使用RealTimeSource組件之前,請考慮以下限制。
- RealTimeSource可以有效地處理不超過幾百條數據記錄的數據源。
- TreeListView不支持RealTimeSource。
- 當GridControl使用RealTimeSource綁定到數據時,不支持就地編輯(以及通過內置編輯表單進行編輯)。
- RealTimeSource不跟蹤數據更改,要顯示數據更新,請確保數據源提供更改通知。
支持以下通知類型:
- IBindingList. ListChanged
- INotifyCollectionChanged. CollectionChanged
- INotifyPropertyChanged. PropertyChanged
初始化RealTimeSource
您可以將任何數據感知控件綁定到RealTimeSource,以GridControl為例進行說明。
要在GridControl中顯示實時數據,請執行以下操作:
- 在代碼中,創建RealTimeSource對象,使用它的RealTimeSource.DataSource屬性將一個實時源鏈接到您的數據。
- 設置LookUpEditBase.ItemsSource屬性(通過GridControl.ItemsSource)到RealTimeSource對象。
C#:
ObservableCollection<Data> Persons; //... DevExpress.Data.RealTimeSource myRealTimeSource = new DevExpress.Data.RealTimeSource(); myRealTimeSource.DataSource = Persons; myGridControl.ItemsSource = myRealTimeSource;
點擊復制
下表描述了其他RealTimeSource配置場景。
- 指定將哪些數據源屬性傳遞給數據感知控件。
使用RealTimeSource.DisplayableProperties屬性指定所需的數據源屬性。
C#:
//A semicolon-separated list of data source property names myRealTimeSource.DisplayableProperties = "Id;Progress";
點擊復制
- 忽略單個屬性值的修改。
設置RealTimeSource. IgnoreItemEvents屬性設置為true。
對數據源項的修改將被RealTimeSource忽略。
只有對數據源列表所做的修改才會傳遞給數據感知控件。
示例
這個例子演示了如何使用RealTimeSource組件在GridControl中顯示快速變化的數據。
提示:本例中的數據是為了演示而隨機生成的。
MainWindows.xaml.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Collections.ObjectModel; using System.Globalization; using System.Windows.Data; using System.Windows.Markup; using DevExpress.Data; using System.Windows.Threading; using System.ComponentModel; namespace RealTimeSourceExample { public partial class MainWindow: Window { ObservableCollection<Data> Persons; int Count = 50; Random Random = new Random(); public MainWindow() { InitializeComponent(); Persons = new ObservableCollection<Data>(); for (int i = 0; i < Count; i++) Persons.Add(new Data { Id = i, Text = "Text" + i, Progress = GetNumber() }); grid.ItemsSource = new RealTimeSource() { DataSource = Persons }; DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(1); timer.Tick += Tick; timer.Start(); } private void Tick(object sender, EventArgs e) { int index = Random.Next(0, Count); Persons[index].Id = GetNumber(); Persons[index].Text = "Text" + GetNumber(); Persons[index].Progress = GetNumber(); } int GetNumber() { return Random.Next(0, Count); } } public class Data: INotifyPropertyChanged { private int _Id; public string _Text; public double _Progress; public int Id { get { return _Id; } set { _Id = value; NotifyPropertyChanged("Id"); } } public string Text { get { return _Text; } set { _Text = value; NotifyPropertyChanged("Text"); } } public double Progress { get { return _Progress; } set { _Progress = value; NotifyPropertyChanged("Progress"); } } public event PropertyChangedEventHandler PropertyChanged; void NotifyPropertyChanged(string name) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(name)); } } }
點擊復制
MainWindows.xaml.vb:
Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Windows Imports System.Collections.ObjectModel Imports System.Globalization Imports System.Windows.Data Imports System.Windows.Markup Imports DevExpress.Data Imports System.Windows.Threading Imports System.ComponentModel Namespace RealTimeSourceExample Partial Public Class MainWindow Inherits Window Private Persons As ObservableCollection(Of Data) Private Count As Integer = 50 Private Random As New Random() Public Sub New() InitializeComponent() Persons = New ObservableCollection(Of Data)() For i As Integer = 0 To Count - 1 Persons.Add(New Data With {.Id = i, .Text = "Text" & i, .Progress = GetNumber()}) Next i grid.ItemsSource = New RealTimeSource() With {.DataSource = Persons} Dim timer As New DispatcherTimer() timer.Interval = TimeSpan.FromMilliseconds(1) AddHandler timer.Tick, AddressOf Tick timer.Start() End Sub Private Sub Tick(ByVal sender As Object, ByVal e As EventArgs) Dim index As Integer = Random.Next(0, Count) Persons(index).Id = GetNumber() Persons(index).Text = "Text" & GetNumber() Persons(index).Progress = GetNumber() End Sub Private Function GetNumber() As Integer Return Random.Next(0, Count) End Function End Class Public Class Data Implements INotifyPropertyChanged Private _Id As Integer Public _Text As String Public _Progress As Double Public Property Id() As Integer Get Return _Id End Get Set(ByVal value As Integer) _Id = value NotifyPropertyChanged("Id") End Set End Property Public Property Text() As String Get Return _Text End Get Set(ByVal value As String) _Text = value NotifyPropertyChanged("Text") End Set End Property Public Property Progress() As Double Get Return _Progress End Get Set(ByVal value As Double) _Progress = value NotifyPropertyChanged("Progress") End Set End Property Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Private Sub NotifyPropertyChanged(ByVal name As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(name)) End Sub End Class End Namespace
點擊復制
MainWindows.xaml:
<Window x:Class="RealTimeSourceExample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" xmlns:local="clr-namespace:RealTimeSourceExample" Name="win" Title="MainWindow" Height="350" Width="525"> <Grid> <dxg:GridControl x:Name="grid"> <dxg:GridControl.Columns> <dxg:GridColumn FieldName="Id"/> <dxg:GridColumn FieldName="Text"/> <dxg:GridColumn FieldName="Progress"> <dxg:GridColumn.EditSettings> <dxe:ProgressBarEditSettings/> </dxg:GridColumn.EditSettings> </dxg:GridColumn> </dxg:GridControl.Columns> <dxg:GridControl.View> <dxg:TableView Name="view" AutoWidth="True"/> </dxg:GridControl.View> </dxg:GridControl> </Grid> </Window>
點擊復制