Привязка списка объектов к элементу управления Chart - PullRequest
0 голосов
/ 22 сентября 2018

Я использую библиотеку SyncFusion UWP для создания интерфейса с диаграммой внутри.Я последовал примеру Getting Started , но не могу заставить его работать.Следующий код содержит некоторые модификации, которые я сделал для удовлетворения потребностей своего приложения.

Модель

public class Voltage
{
    public DateTime Timestamp;
    public double Value;
}

ViewModel Я добавил свойство notify, измененное

public class VoltageViewModel : INotifyPropertyChanged
{
    public List<Voltage> Data { get; set; }

    public VoltageViewModel()
    {
        Data = new List<Voltage>()
        {
            new Voltage() { Timestamp = DateTime.Now.AddMinutes(-1), Value = 5.1 },
            new Voltage() { Timestamp = DateTime.Now.AddMinutes(-2), Value = 4.9 },
            new Voltage() { Timestamp = DateTime.Now.AddMinutes(-3), Value = 4.85 },
            new Voltage() { Timestamp = DateTime.Now.AddMinutes(-4), Value = 5.01 }
        };
    }

    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    public void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        // Raise the PropertyChanged event, passing the name of the property whose value has changed.
        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

XAML

<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ADSO.ViewModel"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:syncfusion="using:Syncfusion.UI.Xaml.Charts"
x:Class="ADSO.MainPage"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

<Page.DataContext>
    <local:VoltageViewModel/>
</Page.DataContext>

<Grid>
    <syncfusion:SfChart HorizontalAlignment="Center" VerticalAlignment="Center" Margin="20,20,20,20">
        <syncfusion:SfChart.PrimaryAxis>
            <syncfusion:DateTimeAxis Header="Time" Interval="10" IntervalType="Minutes" Minimum="9/22/2018" Maximum="9/23/2018"/>
        </syncfusion:SfChart.PrimaryAxis>
        <syncfusion:SfChart.SecondaryAxis>
            <syncfusion:NumericalAxis Header="Voltage (V)"/>
        </syncfusion:SfChart.SecondaryAxis>
        <syncfusion:LineSeries ItemsSource="{Binding Path=Data}" XBindingPath="Timestamp" YBindingPath="Value" >
        </syncfusion:LineSeries>
    </syncfusion:SfChart>
</Grid>

Я не думаю, что это проблема с SyncFusion, и я могу подтвердить, что график рисуетуспешно, но без данных.Это проблема с моей собственной реализацией, но я не могу понять проблему.

1 Ответ

0 голосов
/ 22 сентября 2018

Просто внедрите INotifyPropertyChanged в Модель вместо ViewModel.И убедитесь, что Timestamp и Value объявлены как Свойства.

Модель

public class Voltage : INotifyPropertyChanged
{
    public DateTime Timestamp { get; set; }
    public double Value { get; set; }


    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    public void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        // Raise the PropertyChanged event, passing the name of the property whose value has changed.
        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

Просмотр модели

public class VoltageViewModel
{
      public List<Voltage> Data { get; set; }

      public VoltageViewModel()
      {
          Data = new List<Voltage>()
          {
              new Voltage() { Timestamp = DateTime.Now.AddMinutes(-1), Value = 5.1 },
              new Voltage() { Timestamp = DateTime.Now.AddMinutes(-2), Value = 4.9 },
              new Voltage() { Timestamp = DateTime.Now.AddMinutes(-3), Value = 4.85 },
              new Voltage() { Timestamp = DateTime.Now.AddMinutes(-4), Value = 5.01 }
          };
      }

 }
...