Как я могу скрыть и показать серии LiveCharts с динамически создаваемым графиком и динамическими флажками? - PullRequest
0 голосов
/ 16 июня 2019

В LiveCharts я создаю группу LineSeries с циклом foreach.Как получить доступ к определенной серии строк в этом списке?Я хотел бы показать и скрыть их с помощью флажка в WPF.

      foreach (var item in ElementsList)
        {
            ch.Series.Add(new LineSeries
            {
                Values = item.Value.ElementValues,
                Title = item.Value.ElementName,
                Visibility = Visibility.Hidden
            });
        }
        Chart = ch;

Я бы хотел иметь возможность установить флажок и иметь конкретную серию, отображаемую / скрываемую на графике.

1 Ответ

0 голосов
/ 17 июня 2019

Это можно сделать несколькими способами. Я использую шаблон MVVM здесь, но можно также адаптировать только бэк-код для представления

Сначала я создал класс, который объединяет две информационные линии LineSeries и свойство bool для наглядности (здесь также можно использовать конвертер). Класс также имеет простую логику, что при изменении состояния bool он также меняет свойство видимости ряда.

public class LineSeriesVisible : INotifyPropertyChanged
    {
        private Series _LineSerie;
        public Series LineSerie
        {
            get { return _LineSerie; }
            set
            {
                if (value != _LineSerie)
                {
                    _LineSerie = value;
                    NotifyPropertyChanged();
                }
            }
        }

        private bool _Visibility;
        public bool Visibility
        {
            get { return _Visibility; }
            set
            {
                if (value != _Visibility)
                {
                    _Visibility = value;
                    if (LineSerie != null)
                    {
                        if (value == true)
                        {

                            LineSerie.Visibility = System.Windows.Visibility.Visible;
                        }
                        else
                        {
                            LineSerie.Visibility = System.Windows.Visibility.Collapsed;
                        }
                    }
                    NotifyPropertyChanged();
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

    }

Далее следует объявить коллекцию для ряда строк, для приложения wpf используйте ObserableCollection

private ObservableCollection<LineSeriesVisible> _LineSeriesVisib;
public ObservableCollection<LineSeriesVisible> LineSeriesVisib
{
    get { return _LineSeriesVisib; }
    set
    {
        if (value != _LineSeriesVisib)
        {
            _LineSeriesVisib = value;
            NotifyPropertyChanged();
        }
    }
}

Последняя часть привязывает его к элементу управления ItemsControl. Мы привязываем коллекцию к элементу управления элементами и в качестве флажка использования данных.

<ItemsControl ItemsSource="{Binding LineSeriesVisib,
              Mode=TwoWay,NotifyOnSourceUpdated=True, 
              UpdateSourceTrigger=PropertyChanged}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding LineSerie.Title}" IsChecked="{Binding Visibility}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>

</ItemsControl>

Последний вариант - добавить серию строк в видимую коллекцию после цикла.

LineSeriesVisib = new ObservableCollection<LineSeriesVisible>(ch.Series);

Дайте мне знать, если это работает. У меня это работает :)

...