WPF 工具包图表不显示数据
WPF Toolkit Chart Does Not Display Data
我创建了 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>
和添加值的 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;
}
在你的视图模型中使用 ObservableCollection<KeyValuePair<DateTime,int>>
,原因是这个集合已经实现了 INotifyCollectionChanged
和 INotifyPropertyChanged
,而 Dictionary<>
没有。
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++;
}
}
ViewModel:
public class MyViewModel
{
public ObservableCollection<KeyValuePair<DateTime,int>> MyGraph { get; set; }
public MyViewModel()
{
MyGraph = new ObservableCollection<KeyValuePair<DateTime, int>>();
}
}
我创建了 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>
和添加值的 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;
}
在你的视图模型中使用 ObservableCollection<KeyValuePair<DateTime,int>>
,原因是这个集合已经实现了 INotifyCollectionChanged
和 INotifyPropertyChanged
,而 Dictionary<>
没有。
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++;
}
}
ViewModel:
public class MyViewModel
{
public ObservableCollection<KeyValuePair<DateTime,int>> MyGraph { get; set; }
public MyViewModel()
{
MyGraph = new ObservableCollection<KeyValuePair<DateTime, int>>();
}
}