XamDataChart に DataTable のデータを表示させたい場合は、軸や Series の ItemsSource に DataTable の DataView を指定し、値は列名で指定します。
ViewModel 側
// MainWindowViewModel.cs
internal class MainWindowViewModel
{
private DataTable _energyProductionTable;
public DataView? EnergyProductionView
{
get => _energyProductionTable?.DefaultView;
}
public MainWindowViewModel()
{
_energyProductionTable = new ();
_energyProductionTable.Columns.Add("Country"); // X軸に表示するラベル
_energyProductionTable.Columns.Add("Coal", typeof(double)); // 値1つめ
_energyProductionTable.Columns.Add("Gas", typeof(double)); // 値2つめ
_energyProductionTable.Columns.Add("Hydro", typeof(double)); // 値3つめ
_energyProductionTable.Rows.Add([ "Country1", 86.4505134, 103.2891932, 126.0406841 ]);
_energyProductionTable.Rows.Add([ "Country2", 114.0853903, 82.48463306, 125.9912834 ]);
_energyProductionTable.Rows.Add([ "Country3", 127.4458425, 97.7079237, 123.3935982 ]);
_energyProductionTable.Rows.Add([ "Country4", 102.5485605, 86.98280705, 114.6298345 ]);
}
}
View 側
<!-- MainWindow.xaml -->
<ig:XamDataChart
x:Name="xamDataChart1"
DataContext="{Binding EnergyProductionView}" ... >
<ig:XamDataChart.Axes>
<ig:CategoryXAxis x:Name="xAxis" ItemsSource="{Binding}">
<ig:CategoryXAxis.Label>
<DataTemplate>
<TextBlock Text="{Binding Item.Row.ItemArray[0]}"/>
</DataTemplate>
</ig:CategoryXAxis.Label>
</ig:CategoryXAxis>
<ig:NumericYAxis x:Name="yAxis" MinimumValue="0" MaximumValue="200" >
</ig:NumericYAxis>
</ig:XamDataChart.Axes>
<!-- シリーズはコードビハインドで追加します -->
</ig:XamDataChart>
public MainWindow()
{
InitializeComponent();
var chart = this.xamDataChart1;
var xAxis = this.xAxis;
var yAxis = this.yAxis;
var dataView = chart.DataContext as DataView;
if (dataView == null) return;
var dataTable = dataView.Table;
if (dataTable == null) return;
foreach(DataColumn column in dataTable.Columns)
{
// 1列目はX軸に表示するラベルなのでスキップします。
if (dataTable.Columns.IndexOf(column) == 0) continue;
chart.Series.Add(new ColumnSeries()
{
XAxis = xAxis,
YAxis = yAxis,
ItemsSource = dataView,
ValueMemberPath = column.ColumnName,
Title = column.ColumnName,
});
}
}
実行結果
