更新Y轴最大值后如何刷新WPF图表?

时间:2011-03-06 19:07:16

标签: c# wpf wpftoolkit charts

我正在使用WPFToolKit创建折线图。

图表显示正常,但是我想在第一次加载图表后点击模式窗口时更改Y轴的最大属性。并且应使用更新的Y轴最大值

刷新图表

下面一行显示了如何在xaml中定义图表。

<DVC:Chart Canvas.Top="80" Canvas.Left="10" Name="mcChart" VerticalAlignment="Stretch"/>

我在windows.xaml.cs构造函数中调用下面的代码,并将Y-Axis Max设置为200

mcChart.Axes.Add(new LinearAxis()
        {
            Minimum = 0,
            Maximum = YMax > 0 ? YMax : 200,
            Orientation = AxisOrientation.Y,
            ShowGridLines = true,               
        });

        mcChart.UpdateLayout(); 

如何从模态窗口的按钮单击事件更改Y轴最大值并刷新图表以使用新的YMax显示。

我不确定我是否必须对RegisteredListeners做些什么。 我是WPF的新手,感谢任何帮助!

请注意,我希望从后面的C#代码中实现这一点,而不是在xaml中。

谢谢, Sujay

1 个答案:

答案 0 :(得分:2)

如果您有权访问图表,则可以找到必要的轴并更改Maximum属性而不更新布局。以下是线性Y轴的示例:

var yAxis = this.mcChart.ActualAxes.OfType<LinearAxis>().FirstOrDefault(ax => ax.Orientation == AxisOrientation.Y);
if (yAxis != null)
    yAxis.Maximum = 300;

此示例的完整版本:

<强> MainWindow.xaml

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="20"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Button Content="Set max value = 300" HorizontalAlignment="Center" Click="Button_Click"/>
    <charting:Chart Grid.Row="1" x:Name="mcChart">
        <charting:Chart.Series>
            <charting:LineSeries ItemsSource="{Binding LineItems}" IndependentValuePath="Date" DependentValuePath="Value"/>
        </charting:Chart.Series>
    </charting:Chart>
</Grid>

<强> MainWindow.xaml.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        //Add a linear Y axis
        int YMax = 150;
        mcChart.Axes.Add(new LinearAxis()
        {
            Minimum = 0,
            Maximum = YMax > 0 ? YMax : 200,
            Orientation = AxisOrientation.Y,
            ShowGridLines = true,
        });

        //Create and set a view model
        var items = Enumerable.Range(0, 50).Select(i => new ChartItemModel { Date = new DateTime(2010, 1, 1).AddDays(i), Value = 30 + i }).ToList();
        this.DataContext = new MainViewModel { LineItems = items };
    }

    //Set Maximum=300
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var yAxis = this.mcChart.ActualAxes.OfType<LinearAxis>().FirstOrDefault(ax => ax.Orientation == AxisOrientation.Y);
        if (yAxis != null)
            yAxis.Maximum = 300;
    }
}

public class MainViewModel
{
    public List<ChartItemModel> LineItems { get; set; }
}

public class ChartItemModel
{
    public DateTime Date { get; set; }
    public double Value { get; set; }
}