Это можно сделать несколькими способами. Я использую шаблон 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);
Дайте мне знать, если это работает. У меня это работает :)