Как обновить график WPF после обновления максимального значения оси Y? - PullRequest
1 голос
/ 06 марта 2011

Я создаю линейный график с использованием WPFToolKit.

График работает нормально, но я хочу изменить свойство Maximum оси Y после нажатия кнопки модального окна после первой загрузки диаграммы.И диаграмма должна быть обновлена ​​с обновленным значением Max Axis Y

Ниже строки показывает, как Chart определяется в xaml.конструктор, и он устанавливает Y-Axis Max на 200

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

        mcChart.UpdateLayout(); 

Как я могу изменить значение Y-Axis Max из события нажатия кнопки модального окна и обновить диаграмму для отображения с новым YMax.

Я не уверен, что мне нужно что-то делать с RegisteredListeners.Я новичок в WPF, и любая помощь приветствуется!

Обратите внимание, что я хочу добиться этого с помощью кода C #, а не xaml.

Спасибо, Суджай

1 Ответ

2 голосов
/ 07 марта 2011

Если у вас есть доступ к диаграмме, вы можете найти необходимую ось и изменить свойство 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; }
}
...