Как обновить диаграмму WPF после обновления максимального значения оси Y?

Я создаю линейную диаграмму с помощью WPToolKit.

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

В строке ниже показано, как Chart определяется в xaml.

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

Я вызываю приведенный ниже код в конструкторе windows.xaml.cs, и он устанавливает для оси Y 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, и любая помощь приветствуется!

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

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


person Sujay    schedule 06.03.2011    source источник
comment
Модальное окно отличается от основного окна и не имеет доступа к графику, верно? Я бы решил эту проблему, используя определяемое пользователем событие. Или я бы изменил максимальное значение после закрытия модального окна. Это зависит от задачи.   -  person vortexwolf    schedule 06.03.2011
comment
хорошо, забудьте о модальном окне. В основном я ищу, как изменить максимальное значение и обновить диаграмму. я могу разобраться, когда и где вызывать эту логику. Спасибо, Суджей.   -  person Sujay    schedule 07.03.2011
comment
@user647204 user647204 Обновления будут отражаться автоматически, поскольку свойство Maximum является свойством зависимости. Когда-нибудь вы познакомитесь с ними, но сейчас просто знайте, что вы можете установить значение свойства без вызова функций обновления.   -  person vortexwolf    schedule 07.03.2011


Ответы (1)


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