2016-12-09 9 views
1

Я создаю приложение WPF, добавленный график для разметки, сделанных привязок. Когда я добавляю новые точки к данным графика, ось меняет свои максимальные значения, но линия графика не отображается.WPF Toolkit Chart не отображает данные

Я не могу понять, что не так.

Вот разметка моего графика:

<chartingToolkit:Chart x:Name="chart" 
          BorderThickness="1" 
          VerticalAlignment="Stretch" 
          Grid.Row="1"> 
     <chartingToolkit:LineSeries Title="Options Count" 
            Visibility="Visible" 
            Background="Transparent" 
            ItemsSource="{Binding MyGraph}" 
            IndependentValuePath="Key" 
            DependentValuePath="Value" 
            DataPointStyle="{StaticResource DataPointStyle1}" 
            /> 
     <chartingToolkit:Chart.Axes> 
      <chartingToolkit:LinearAxis Orientation="Y" 
             Minimum="0" 
             Maximum="{Binding MaxValueForAxis}" 
             ShowGridLines="True" /> 

      <chartingToolkit:DateTimeAxis Orientation="X" 
              ShowGridLines="True" 
              Minimum="{Binding MinDateForAxis}" 
              Maximum="{Binding MaxDateForAxis}" 
              IntervalType="Auto" 
              AxisLabelStyle="{StaticResource AxisStyle}"/> 
     </chartingToolkit:Chart.Axes> 
    </chartingToolkit:Chart> 

И ViewModel код, который добавляет значения

public void AddNew() 
    { 
     MyGraph.Add(DateTime.Now.AddDays(i), i * 100); 
     i++; 

     OnPropertyChanged("MyGraph"); 
     OnPropertyChanged("MaxValueForAxis"); 
     OnPropertyChanged("MinDateForAxis"); 
     OnPropertyChanged("MaxDateForAxis"); 
    } 

Вот как я установил DataContext

ViewModel vm = new ViewModel(); 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = vm; 
    } 

enter image description here

+0

Покажите, как вы настраиваете свой «DataContext». – jsanalytics

+0

См. Оригинальное сообщение, я его отредактировал. Связывание работает как минимум для MaxValueForAxis, MinDateForAxis, MaxDateForAxis. Но диаграмма не показывает строку графика – Dimitry

+0

ОК, это выглядит правильно. Является ли 'MyGraph'' ObservableCollection <> 'или чем-то еще? – jsanalytics

ответ

1

Используйте модель ObservableCollection<KeyValuePair<DateTime,int>> в вашей модели, поскольку эта коллекция уже реализует INotifyCollectionChanged и INotifyPropertyChanged, а Dictionary<> - нет.

enter image description here

XAML:

<Window x:Class="WpfApplication339.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
     xmlns:local="clr-namespace:WpfApplication339" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"></RowDefinition> 
      <RowDefinition Height="10*"></RowDefinition> 
     </Grid.RowDefinitions> 
     <Button Content="Add" Grid.Row="0" Click="Button_Click" Width="75" HorizontalAlignment="Left"/> 
     <chartingToolkit:Chart x:Name="chart" 
          BorderThickness="1" 
          VerticalAlignment="Stretch" 
          Grid.Row="1"> 
      <chartingToolkit:LineSeries Title="Options Count" 
            Visibility="Visible" 
            Background="Transparent" 
            ItemsSource="{Binding MyGraph}" 
            IndependentValuePath="Key" 
            DependentValuePath="Value" 
            /> 
      <chartingToolkit:Chart.Axes> 
       <chartingToolkit:LinearAxis Orientation="Y" 
             Minimum="0" 
             Maximum="{Binding MaxValueForAxis}" 
             ShowGridLines="True" /> 

       <chartingToolkit:DateTimeAxis Orientation="X" 
              ShowGridLines="True" 
              Minimum="{Binding MinimumDateForAxis}" 
              Maximum="{Binding MaxDateForAxis}" 
              IntervalType="Auto" 
               /> 
      </chartingToolkit:Chart.Axes> 
     </chartingToolkit:Chart> 
    </Grid> 
</Window> 

MainWindow:

public partial class MainWindow : Window 
{ 
    MyViewModel vm; 
    int i; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     vm = new MyViewModel(); 
     DataContext = vm; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     vm.MyGraph.Add(new KeyValuePair<DateTime, int>(DateTime.Now.AddDays(i), i * 100)); 
     i++; 
    } 
} 

ViewModel:

public class MyViewModel 
{ 
    public ObservableCollection<KeyValuePair<DateTime,int>> MyGraph { get; set; } 

    public MyViewModel() 
    { 
     MyGraph = new ObservableCollection<KeyValuePair<DateTime, int>>(); 
    } 
} 
+0

Да, он работает. Спасибо вам большое! – Dimitry

+0

Добро пожаловать! – jsanalytics