Wpf 如何将动态创建的复选框绑定到LiveCharts中动态创建的系列?

Wpf 如何将动态创建的复选框绑定到LiveCharts中动态创建的系列?,wpf,checkbox,dynamic,livecharts,Wpf,Checkbox,Dynamic,Livecharts,我有一个活页图表,正在为列表中的每个项目创建复选框。此列表还包含liveCharts中每个系列的数据。如何将动态创建的复选框与数据中的每个LiveCharts.LineSeries绑定 我已经创建了复选框: <!-- Creating checkboxes by binding to list --> <ListView ItemsSource="{Binding ElementItemList}" ScrollViewer.HorizontalScrollBarVisibi

我有一个活页图表,正在为列表中的每个项目创建复选框。此列表还包含liveCharts中每个系列的数据。如何将动态创建的复选框与数据中的每个LiveCharts.LineSeries绑定

我已经创建了复选框:

<!-- Creating checkboxes by binding to list -->
<ListView ItemsSource="{Binding ElementItemList}" 
ScrollViewer.HorizontalScrollBarVisibility="Disabled" Width="600">
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=ElementName}" />
                        <CheckBox IsChecked="{Binding Path=ElementIsSelected}"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>

        </ListView>

<!-- Display the chart -->
<Grid Grid.Row="1" x:Name="TestGrid"></Grid>

因此我假设您希望在
系列集合中有一个
复选框
来表示每个
系列

因此,我将有两个
public
属性,一个用于
SeriesCollection
,另一个用于
复选框的列表

public SeriesCollection SeriesCollection { get; set; }
public List<CheckBox> CheckBoxCollection { get; set; }
在我的例子中,我决定在单击
复选框时使相应的序列可见/隐藏,因此我的check/uncheck方法如下所示:

private void DynamicCheckBoxChecked(object sender, EventArgs e)
{
    ShowHideSeries(sender, Visibility.Visible);
}

private void DynamicCheckBoxUnchecked(object sender, EventArgs e)
{
    ShowHideSeries(sender, Visibility.Collapsed);
}

private void ShowHideSeries(object sender, Visibility visibility)
{
    var checkBox = (CheckBox)sender;
    var found = SeriesCollection.FirstOrDefault(x => x.Title == checkBox.Name);
    if (found != null)
    {
        var series = (LineSeries)found;
        series.Visibility = visibility;
    }
}
public MainWindow()
{
    InitializeComponent();
    DynamicallyCreateStuff();
    DataContext = this;
}
为了节省时间和简单起见,我没有使用
ViewModel
,因此我的
MainWindow
构造函数如下所示:

private void DynamicCheckBoxChecked(object sender, EventArgs e)
{
    ShowHideSeries(sender, Visibility.Visible);
}

private void DynamicCheckBoxUnchecked(object sender, EventArgs e)
{
    ShowHideSeries(sender, Visibility.Collapsed);
}

private void ShowHideSeries(object sender, Visibility visibility)
{
    var checkBox = (CheckBox)sender;
    var found = SeriesCollection.FirstOrDefault(x => x.Title == checkBox.Name);
    if (found != null)
    {
        var series = (LineSeries)found;
        series.Visibility = visibility;
    }
}
public MainWindow()
{
    InitializeComponent();
    DynamicallyCreateStuff();
    DataContext = this;
}
XAML
在这里是非常简单的:

<Window x:Class="SOLineCharts.MainWindow"
        ....
        xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
        mc:Ignorable="d"
        WindowStartupLocation="CenterScreen"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ItemsControl Grid.Column="0" 
                      ItemsSource="{Binding CheckBoxCollection}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Vertical" ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
        <lvc:CartesianChart Series="{Binding SeriesCollection}" Grid.Column="1"/>
    </Grid>
</Window>

结果: 装载时:

取消选中一个复选框: