2016-12-09 30 views
1

我創建WPF應用程序,將圖表添加到標記,進行綁定。 當我爲圖形數據添加新點時,軸會更改其最大值,但圖形線不會顯示。WPF工具包圖表不顯示數據

我不明白什麼是錯的。

這裏是我的圖表標記:

<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> 

而視圖模型的代碼,增加值

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>>,原因是此集合已實施INotifyCollectionChangedINotifyPropertyChanged,而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> 

主窗口:

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++; 
    } 
} 

視圖模型:

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

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

是的,它的工作原理。非常感謝你! – Dimitry

+0

非常歡迎! – jsanalytics