c#Live Charts如何使用Formatter

时间:2017-05-15 11:47:00

标签: c# charts data-visualization livecharts

我有点像c#n00b和完整的Live Charts n00b。我正在尝试创建一个跨越多天的简单图表。图表显示数据,但日期标签未在X轴上正确格式化。我相信它是因为我如何使用Live Charts Formatter。

MainWindow中的XAML

<lvc:CartesianChart x:Name="RankGraph" Series="{Binding Series}">
<lvc:CartesianChart.AxisX>
<lvc:Axis LabelFormatter="{Binding Formatter}"></lvc:Axis>
</lvc:CartesianChart.AxisX>
</lvc:CartesianChart>

创建图表的功能。

MainWindow _MainWindow = (MainWindow)Application.Current.MainWindow;

//Days
var dayConfig = Mappers.Xy<DateModel>().X(dateModel => dateModel.DateTime.Ticks / TimeSpan.FromDays(1).Ticks).Y(dateModel => dateModel.Value);

Func<double, string> Formatter = value => new DateTime((long)(value * TimeSpan.FromDays(1).Ticks)).ToString("d");

_MainWindow.Formatter = value => new DateTime((long)(value * TimeSpan.FromDays(1).Ticks)).ToString("d");

SeriesCollection Series = new SeriesCollection(dayConfig)
{
    new LineSeries
    {
        Values = new ChartValues<DateModel>
        {
            new Wpf.CartesianChart.Using_DateTime.DateModel
            {
                DateTime    = System.DateTime.Now,
                Value       = 5
            },
            new Wpf.CartesianChart.Using_DateTime.DateModel
            {
                DateTime    = System.DateTime.Now.AddDays(1),
                Value       = 9
            },
            new Wpf.CartesianChart.Using_DateTime.DateModel
            {
                DateTime    = System.DateTime.Now.AddDays(2),
                Value       = 4
            }
        },

        Fill = Brushes.Transparent
    },

};

Application.Current.Dispatcher.Invoke((Action)delegate
{
    if (_MainWindow.ct.IsCancellationRequested) return;

    _MainWindow.RankGraph.Series = Series;

});

我也在mainwindow.cs中设置Formatter

public Func<double, string> Formatter   { get; set; }           = value => new DateTime((long)(value * TimeSpan.FromDays(1).Ticks)).ToString("d");

我已尝试在几乎所有地方声明Formatter,但它在使用它时看起来不像XAML。上面的代码生成下面的图表。

enter image description here

如所有示例所示,在从简单方法而不是UserControl类包装器创建图形时,如何正确使用Formatter选项。

1 个答案:

答案 0 :(得分:0)

由于某些原因,XAML中的绑定有时不起作用。 您需要在XAML中命名LiveCharts控件(以其他方式命名):

<lvc:CartesianChart x:Name="RankGraph" Series="{Binding Series}">
<lvc:Axis x:Name="RankGraphAxisX" LabelFormatter="{Binding Formatter}"></lvc:Axis>

,然后在代码中绑定Series和LabelFormatter:

RankGraph.Series = Series;
RankGraphAxisX.LabelFormatter = Formatter;