LiveCharts - одноточечный график - PullRequest
0 голосов
/ 18 июня 2019

Можно ли отобразить график LineSeries X / Y, который содержит только одну точку? Для двух или более точек это прекрасно работает, но одна точка не отображается, даже если PointGeometry установлен на какую-то форму. По крайней мере, в этом варианте я бы ожидал увидеть одну точку для одноточечного ряда. Есть ли способ включить его?

РЕДАКТИРОВАТЬ: я действительно извиняюсь за медленный ответ, я не был за компьютером. Ответ Сача тронул меня, но у меня все еще нет решения. Посмотрите на мой код - модификация образца Сача. Если я использую свой собственный тип данных и модуль форматирования для оси, он работает только с одной точкой, если она указана в конструкторе. Если я создам пустую серию, появится ли график, когда я добавлю хотя бы две точки? (см. обработчик мыши вниз)

public partial class MainWindow : Window
    {
        LineSeries lineSeries;
        public SeriesCollection SeriesCollection { get; set; }
        public Func<double, string> XFormatter { get; set; }
        public Func<double, string> YFormatter { get; set; }

        public MainWindow()
        {
            InitializeComponent();

            var dayConfig = Mappers.Xy<DateModel>()
                .X(dayModel => (double)dayModel.DateTime.Ticks / TimeSpan.FromHours(1).Ticks)
                .Y(dayModel => dayModel.Value);

            lineSeries = new LineSeries()
            {
                //Values = new ChartValues<DateModel>{ new DateModel(DateTime.Now, 3) }, //this works
                Values = new ChartValues<DateModel>(),
                PointGeometry = DefaultGeometries.Circle
            };

            SeriesCollection = new SeriesCollection(dayConfig);
            SeriesCollection.Add(lineSeries);

            XFormatter = value => new System.DateTime((long)(value * TimeSpan.FromHours(1).Ticks)).ToString("HH:mm");
            YFormatter = value => value.ToString("0.0000");

            DataContext = this;
        }


        public class DateModel
        {
            public DateModel(DateTime timestamp, double value)
            {
                DateTime = timestamp;
                Value = value;
            }

            public System.DateTime DateTime { get; set; }
            public double Value { get; set; }
        }

        private void OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            lineSeries.Values.Add(new DateModel(DateTime.Now, 3));
        }
    }

1 Ответ

1 голос
/ 18 июня 2019

Работает по умолчанию.Это простой LineSeries только с одной точкой:

public partial class MainWindow : Window
{
    public SeriesCollection SeriesCollection { get; set; }
    public MainWindow()
    {
        InitializeComponent();

        SeriesCollection = new SeriesCollection
        {
            new LineSeries
            {
                Values = new ChartValues<double> { 3 }
            }
        };

        DataContext = this;
    }
}

И XAML:

<Window x:Class="SOLineCharts.MainWindow"
        ....
        xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
        mc:Ignorable="d"
        WindowStartupLocation="CenterScreen"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <lvc:CartesianChart Series="{Binding SeriesCollection}" />
    </Grid>
</Window>

Результат:

enter image description here

...