Я пытаюсь понять класс Mappers.XY, используя вертикальный ряд, основанный на двойниках. Чтобы проверить это, я хочу, чтобы все четные индексы оси Y были заполнены красным, но .Fill, похоже, использует только значения X. Вот код, который у меня есть, и результаты:
var RedBrush = new SolidColorBrush(Color.FromRgb(238, 83, 80));
Mapper = Mappers.Xy<double>()
.X((value, index) => value)
.Y((value, index) => index)
.Fill(index => index % 2 == 0 ? RedBrush : null)
.Stroke(index => index % 2 == 0 ? RedBrush : null);
Я получаю красные полосы только тогда, когда значение X даже, как показано здесь: Красные значения X Я даже изменил .Fill, чтобы он основывался на значении, но без изменений.
РЕДАКТИРОВАТЬ: я думаю, что сузил проблему до использования метода по умолчанию для .Fill, который:
public CartesianMapper<T> Fill(Func<T, object> predicate);
Я думаю, что это использует двойное значение в качестве основы для заполнения, которое в моем случае будет X-значениями. Вместо этого я должен использовать перегрузку для .Fill, которая, кажется, рассматривает индекс как int... чего я и хочу:
public CartesianMapper<T> Fill(Func<T, int, object> predicate);
Проблема в том, что я не уверен, как это использовать. Вместо того, чтобы иметь:
.Fill(index => index % 2 == 0 ? RedBrush : null)
что это должно быть? Мои навыки лямбды находятся на уровне новичка.
*** ПРЕДЫДУЩИЙ ТЕКСТ, КОТОРЫЙ МОЖНО ИГНОРИРОВАТЬ...
Я просмотрел типы и конфигурации для помощи здесь: https://lvcharts.net/App/examples/v1/wpf/Types%20and%20Configuration и, в частности, я пытаюсь адаптировать эти две концепции к своей собственной:
- На уровне коллекции серий
Когда вы определяете экземпляр коллекции Series, вы также можете передать конфигурацию по умолчанию, эта конфигурация переопределяет глобальную конфигурацию и будет установлена, только если конфигурация Series имеет значение null:
var mapper = Mappers.Xy<MyClass>().X(v => v.XProp).Y(v => v.YProp);
var seriesCollection = new SeriesCollection(mapper);
myChart.SeriesCollection = seriesCollection;
- В конкретной серии
Наконец, вы также можете определить маппер только для серии, это переопределит конфигурацию >globally и SeriesCollection:
var mapper = Mappers.Xy<MyClass>().X(v => v.XProp).Y(v => v.YProp);
var pieSeries = new PieSeries(mapper);
Проблема в том, что в примерах используются ObservablePoints со свойствами, которых у меня нет, потому что я просто использую двойники.
Кто-нибудь знает, возможно ли это сделать, используя только двойники? Любые альтернативы?