我有一個C#.net Windows窗體應用程序使用圖表與一系列行系列。我有一個存儲讀數的物理設備,當我下載讀數時,我希望圖表填寫詳細信息。圖表綁定到非原始類型
我在軟件中創建了可根據位置使用不同單位的可量化值(如溫度)的類型,允許我爲顯示單位設置用戶設置,並且只處理背景中的所有內容而不關心,當它顯示給用戶時,它在正確的單位。
C#.NET Charting.Series類非常嚴格,當試圖使用綁定數組進行繪製時,它會引發一個帶有以下語句的ArgumentExeption:「系列數據點不支持Units.Temperature類型的值,只有這些類型的值可以使用:Double,Decimal,Single,int,long,uint,ulong,String,DateTime,short,ushort「。
溫度類型有一個名爲Value的屬性,它是一個double,也可以隱式轉換爲double,但這似乎並不重要。我希望有一種方法來綁定它,以便它在每次請求結果數組中的值時進行轉換,以便它可以正確地繪製圖形,任何人都知道可以如何完成這個 ?
我希望避免需要LogItem [],然後是一個輔助double [],只是爲了轉換。
private LogItem[] results;
private async void GraphPage_Load(object sender, EventArgs e) {
var count = await device.LogCount.Read(CancelToken);
results = new LogItem[count];
graph.DataSource = results;
graph.Series[0].XValueMembers = nameof(LogItem.DateTime); //Type is System.DateTime
graph.Series[0].YValueMembers = nameof(LogItem.Temperature); //Type my library, Units.Temperature
var prog = new Progress<double>();
prog.ProgressChanged += (sender2, e2) => {
BeginInvoke(new Action(() => {
progBar.Value = results.Count(log => !Equals(log, LogItem.Empty));
CheckEmptyPoints(); //Sets or clears Points[x].IsEmpty;
graph.Invalidate(); //Force graph to draw new results, maybe a better way of doing this?
}));
};
await device.DownloadLogs(CancelToken, results, prog); //Takes output buffer and IProgress to report more data has been downloaded.
}
不客氣:) –
只需確認一切正常,然後再標記答案。 – TheBeardedQuack