• <menu id="w2i4a"></menu>
  • logo Devexpress WPF控件文檔中心

    實(shí)時源


    立即下載DevExpress WPF

    RealTimeSource組件旨在顯示少量快速變化的數(shù)據(jù),同時保持用戶界面的響應(yīng)性。

    提示:RealTimeSource可以有效地處理不超過幾百條數(shù)據(jù)記錄的數(shù)據(jù)源。

    下面的動畫演示了使用RealTimeSource綁定到動態(tài)數(shù)據(jù)的GridControl。

    下載數(shù)據(jù)

    如果數(shù)據(jù)源中的記錄經(jīng)常更新(例如,每秒更新20,000次),您應(yīng)該考慮使用RealTimeSource組件。

    使用帶有靜態(tài)數(shù)據(jù)的RealTimeSource不會帶來任何性能改進(jìn)。

    提示:RealTimeSource是數(shù)據(jù)感知控件和實(shí)際數(shù)據(jù)之間的一層。

    在決定在應(yīng)用程序中使用RealTimeSource組件之前,請考慮以下限制。

    • RealTimeSource可以有效地處理不超過幾百條數(shù)據(jù)記錄的數(shù)據(jù)源。
    • TreeListView不支持RealTimeSource。
    • 當(dāng)GridControl使用RealTimeSource綁定到數(shù)據(jù)時,不支持就地編輯(以及通過內(nèi)置編輯表單進(jìn)行編輯)。
    • RealTimeSource不跟蹤數(shù)據(jù)更改,要顯示數(shù)據(jù)更新,請確保數(shù)據(jù)源提供更改通知。

    支持以下通知類型:

    • IBindingList. ListChanged
    • INotifyCollectionChanged. CollectionChanged
    • INotifyPropertyChanged. PropertyChanged

    初始化RealTimeSource

    您可以將任何數(shù)據(jù)感知控件綁定到RealTimeSource,以GridControl為例進(jìn)行說明。

    要在GridControl中顯示實(shí)時數(shù)據(jù),請執(zhí)行以下操作:

    • 在代碼中,創(chuàng)建RealTimeSource對象,使用它的RealTimeSource.DataSource屬性將一個實(shí)時源鏈接到您的數(shù)據(jù)。
    • 設(shè)置LookUpEditBase.ItemsSource屬性(通過GridControl.ItemsSource)到RealTimeSource對象。

    C#:

    ObservableCollection<Data> Persons;
    //...
    DevExpress.Data.RealTimeSource myRealTimeSource = new DevExpress.Data.RealTimeSource();
    myRealTimeSource.DataSource = Persons;
    myGridControl.ItemsSource = myRealTimeSource;

    點(diǎn)擊復(fù)制

    下表描述了其他RealTimeSource配置場景。

    • 指定將哪些數(shù)據(jù)源屬性傳遞給數(shù)據(jù)感知控件。

    使用RealTimeSource.DisplayableProperties屬性指定所需的數(shù)據(jù)源屬性。

    C#:

    //A semicolon-separated list of data source property names
    myRealTimeSource.DisplayableProperties = "Id;Progress";

    點(diǎn)擊復(fù)制

    • 忽略單個屬性值的修改。

    設(shè)置RealTimeSource. IgnoreItemEvents屬性設(shè)置為true。

    對數(shù)據(jù)源項(xiàng)的修改將被RealTimeSource忽略。

    只有對數(shù)據(jù)源列表所做的修改才會傳遞給數(shù)據(jù)感知控件。

    示例

    這個例子演示了如何使用RealTimeSource組件在GridControl中顯示快速變化的數(shù)據(jù)。

    提示:本例中的數(shù)據(jù)是為了演示而隨機(jī)生成的。

    View Example

    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));
    }
    }
    }

    點(diǎn)擊復(fù)制

    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

    點(diǎn)擊復(fù)制

    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>

    點(diǎn)擊復(fù)制

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();