无法将 SeriesCollection 值绑定到 DataGrid

Unable to bind SeriesCollection values to DataGrid

我目前正在使用 Livecharts,我正在尝试将 SeriesCollection 绑定到 DataGrid。可以绑定它,但是这个系列有一些值,我希望 DataGrid 显示这些值。但是只显示绑定了两个SeriesCollection项LiveCharts.SeriesAlgorithm.LineAlgorithm,不知道是否需要转换器来解决这个问题

xaml.cs

    public MyConstructor()
    {
        SeriesCollection = new SeriesCollection();
        SeriesCollection.Add(reducedValuesLineSeries); // adds some points 
        SeriesCollection.Add(fullValuesLineSeries); // adds a line composed by many ponits
    }

    private SeriesCollection seriesCollection;
    public SeriesCollection SeriesCollection
    {
        get => seriesCollection;
        set
        {
            seriesCollection = value;
            OnPropertyChanged();
        }
    }

xaml

<DataGrid ItemsSource="{Binding SeriesCollection}"/>
                

您必须实施 IValueConverter 才能从系列中提取这些点。显然,这些点深埋在“集合”中。名称 collection 在这里非常具有误导性,因为 SeriesCollection 与其说是一个实际的集合,不如说是一个数据模型。整个库实现起来比较混乱。

您实际拥有什么数据类型作为数据点取决于您的实现。遗憾的是,您没有显示这些详细信息。

此示例假定数据项的类型为 Point:

ViewModel.cs

class ViewModel
{
  public ViewModel()
  {
    var chartValues = new ChartValues<Point>();
   
    // Create a sine 
    for (int x = 0; x < 361; x++)
    {
      var point = new Point() {X = x, Y = Math.Sin(x * Math.PI / 180)}; 
      chartValues.Add(point);
    }

    this.SeriesCollection = new SeriesCollection
    {
      new LineSeries
      {
        Configuration = new CartesianMapper<Point>()
          .X(point => point.X)
          .Y(point => point.Y),
        Title = "Series X",
        Values = chartValues,
        Fill = Brushes.DarkRed
      }
    };
  }
}

SeriesCollectionToPointsConverter.cs

class SeriesCollectionToPointsConverter : IValueConverter
{
  #region Implementation of IValueConverter

  public object Convert(object value, Type targetType, object parameter, CultureInfo culture) =>
    value is SeriesCollection seriesCollection
      ? seriesCollection.SelectMany(series => series.Values as ChartValues<Point>)
      : Binding.DoNothing;

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) =>
    throw new NotSupportedException();

  #endregion
}

MainWindow.xaml

<Window>
  <Window.DataContext>
    <ViewModel />
  </Window.DataContext>

  <Window.Resources>
    <SeriesCollectionToPointsConverter x:Key="SeriesCollectionToPointsConverter" />
  </Window.Resources>

  <DataGrid ItemsSource="{Binding SeriesCollection, Converter={StaticResource SeriesCollectionToPointsConverter}}" />
</Window>