Невозможно привязать значения SeriesCollection к DataGrid - PullRequest
0 голосов
/ 13 июля 2020

В настоящее время я работаю с 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}"/>
                

1 Ответ

0 голосов
/ 13 июля 2020

Вы должны реализовать IValueConverter, чтобы извлечь эти точки из ряда. Судя по всему, точки зарыты глубоко внутри «коллекции». Коллекция имен здесь вводит в заблуждение, поскольку 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>
...