實時源
RealTimeSource組件旨在顯示少量快速變化的數(shù)據(jù),同時保持用戶界面的響應性。
提示:RealTimeSource可以有效地處理不超過幾百條數(shù)據(jù)記錄的數(shù)據(jù)源。
下面的動畫演示了使用RealTimeSource綁定到動態(tài)數(shù)據(jù)的GridControl。
 
 
如果數(shù)據(jù)源中的記錄經(jīng)常更新(例如,每秒更新20,000次),您應該考慮使用RealTimeSource組件。
使用帶有靜態(tài)數(shù)據(jù)的RealTimeSource不會帶來任何性能改進。
提示:RealTimeSource是數(shù)據(jù)感知控件和實際數(shù)據(jù)之間的一層。
在決定在應用程序中使用RealTimeSource組件之前,請考慮以下限制。
- RealTimeSource可以有效地處理不超過幾百條數(shù)據(jù)記錄的數(shù)據(jù)源。
- TreeListView不支持RealTimeSource。
- 當GridControl使用RealTimeSource綁定到數(shù)據(jù)時,不支持就地編輯(以及通過內(nèi)置編輯表單進行編輯)。
- RealTimeSource不跟蹤數(shù)據(jù)更改,要顯示數(shù)據(jù)更新,請確保數(shù)據(jù)源提供更改通知。
支持以下通知類型:
- IBindingList. ListChanged
- INotifyCollectionChanged. CollectionChanged
- INotifyPropertyChanged. PropertyChanged
初始化RealTimeSource
您可以將任何數(shù)據(jù)感知控件綁定到RealTimeSource,以GridControl為例進行說明。
要在GridControl中顯示實時數(shù)據(jù),請執(zhí)行以下操作:
- 在代碼中,創(chuàng)建RealTimeSource對象,使用它的RealTimeSource.DataSource屬性將一個實時源鏈接到您的數(shù)據(jù)。
- 設置LookUpEditBase.ItemsSource屬性(通過GridControl.ItemsSource)到RealTimeSource對象。
C#:
ObservableCollection<Data> Persons; //... DevExpress.Data.RealTimeSource myRealTimeSource = new DevExpress.Data.RealTimeSource(); myRealTimeSource.DataSource = Persons; myGridControl.ItemsSource = myRealTimeSource;
點擊復制
下表描述了其他RealTimeSource配置場景。
- 指定將哪些數(shù)據(jù)源屬性傳遞給數(shù)據(jù)感知控件。
使用RealTimeSource.DisplayableProperties屬性指定所需的數(shù)據(jù)源屬性。
C#:
//A semicolon-separated list of data source property names myRealTimeSource.DisplayableProperties = "Id;Progress";
點擊復制
- 忽略單個屬性值的修改。
設置RealTimeSource. IgnoreItemEvents屬性設置為true。
對數(shù)據(jù)源項的修改將被RealTimeSource忽略。
只有對數(shù)據(jù)源列表所做的修改才會傳遞給數(shù)據(jù)感知控件。
示例
這個例子演示了如何使用RealTimeSource組件在GridControl中顯示快速變化的數(shù)據(jù)。
提示:本例中的數(shù)據(jù)是為了演示而隨機生成的。
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>
點擊復制

 QQ交談
QQ交談 在線咨詢
在線咨詢 
                 
                
 渝公網(wǎng)安備
            50010702500608號
渝公網(wǎng)安備
            50010702500608號
             
            
 客服熱線
客服熱線