DevExpress 18.1版本 的 Chart 方面问题
发表于2019-05-10
回复:6
查看:36275 |
主要是关于 DevExpress 的 Chart 方面的
想在 dockManager.DockController.AddDocumentPane 中 多文档方式显示, 每个文档显示2个 Chart, 实时更新数据(100 ms)。
Chart1 显示数据格式为 : x轴 0 - 1000 ; y轴为 采集的数据, 只有一条曲线
每次更新大概1000 个数据
Chart2 显示 数据格式为 :x轴单位为秒,格式为 1位小数,例如 5.6s, 显示动态采集的数据
会有多条曲线,每次更新每条曲线的一个点。
显示内容 如下图所示:图1、图2
问题一:上图显示的标签 ,在切换文档时 标签消失。 请问如何解决?
问题二:如果高效率显示曲线, 当我新建线程,在线程中更新Chart 绑定的数据时,系统非常卡顿
Chart绑定数据方式如下:
<dxc:XYDiagram2D.SeriesItemTemplate>
<DataTemplate DataType="{x:Type ocLib:OcDataSource}">
<dxc:LineSeries2D DisplayName="{Binding Name}"
DataSource="{Binding Data}"
Brush="{Binding Color}"
ArgumentDataMember="X"
ValueDataMember="Y"
ArgumentScaleType="Auto"
MarkerVisible="False"
CrosshairLabelPattern="{}{A:F1}: {V:F0}"/>
</DataTemplate>
</dxc:XYDiagram2D.SeriesItemTemplate>
ocLib:OcDataSource.Data 的定义如下:
public class OcDataSource
{
public string Name { get; set; }
public GenericCollection<OcWaveData> Data { get; set; }
public SolidColorBrush Color { get; set; }
}
public class GenericCollection<T> : ObservableCollection<T>
{
public void AddRange(IList<T> items)
{
try
{
foreach (T item in items)
Items.Add(item);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, (IList)items,
Items.Count - items.Count));
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
public void RemoveRangeAt(int startingIndex, int count)
{
var removedItems = new List<T>(count);
for (int i = 0; i < count; i++)
{
removedItems.Add(Items[startingIndex]);
Items.RemoveAt(startingIndex);
}
if (count > 0)
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove,
(IList<T>)removedItems, startingIndex));
}
}
WPF 更新数据时, 新建了一个线程 ,在线程中更新OcDataSource 中数据, 提示 不是同一线程
因此 使用
// Doc.XyFull.Dispatcher.BeginInvoke(new Action(() =>
Doc.XyFull.Dispatcher.BeginInvoke(new Action(() =>
{
vm.NowDoc.DocModel.FullData[0].Data.AddRange(fullList);
}));
进行更新数据, 结果非常卡顿。
期待你能帮忙解决问题,谢谢。
登录 慧都网发表评论