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

実行結果

 

 

Tagged:

製品について

Ultimate UI for WPF