Silverlight:如何从集合集合中动态创建GroupBox内的复选框?

Silverlight:如何从集合集合中动态创建GroupBox内的复选框?,silverlight,checkbox,groupbox,Silverlight,Checkbox,Groupbox,我的案例类似于,我有一个包含集合的集合对象,如下所示: public class GroupBoxColletion { public string GroupBoxName; public list<CheckBox> CheckBoxName; } 注意:我总共有5个分组框,在每个分组框中我需要创建100个复选框 我如何在silverlight 4.0中使用绑定技术创建这个 如果有任何提示,我们将不胜感激。我知道您正在尝试做什么,但我不确定这是实现它的正确方法。

我的案例类似于,我有一个包含集合的集合对象,如下所示:

public class GroupBoxColletion
{
    public string GroupBoxName;
    public list<CheckBox> CheckBoxName;
}
注意:我总共有5个分组框,在每个分组框中我需要创建100个复选框

我如何在silverlight 4.0中使用绑定技术创建这个


如果有任何提示,我们将不胜感激。

我知道您正在尝试做什么,但我不确定这是实现它的正确方法。如果您想在Silverlight中使用数据绑定,那么您应该有要绑定的数据。不幸的是,复选框本身不是一段数据,而是一个用户控件。我建议创建一个可以绑定到复选框的数据收集

public class GroupBoxCollection
{
    public string GroupBoxName;
    public List<bool> CheckBoxName;
}
通过这种方式,可以使用包含复选框的ItemTemplate将CheckBoxName集合的值绑定到ItemsControl


我希望这有点帮助。如果您需要更多信息,只需写一条评论,我将在更多帮助下编辑此答案。

您想在此处分离您的顾虑

您的模型将具有如下结构:

public class GroupBoxCollection
{
    public List<GroupBoxContent> Collections { get; set; }
}

public class GroupBoxContent
{
    public string GroupBoxName { get; set; }
    public List<GroupBoxItem> Items { get; set; }
}

public class GroupBoxItem
{
    public string ItemName { get; set; }
    public bool IsChecked { get; set; }
}
当然,你可以按照你想要的方式来设计样式/模板,也可以使用列表框以外的其他东西来实现这一点,但这就是总体思路

注:

您可能还需要根据需要使模型实现INotifyPropertyChanged和/或使用ObservableCollection而不是List。如果希望视图在用户选中/取消选中任何复选框时修改模型,则可能还需要使用双向数据绑定

如果您想按原样测试我的示例以查看发生了什么,请确保在将其设置为DataContext之前,先填充设置为TestListBox的DataContext的GroupBoxCollection实例

    <ListBox x:Name="TestListBox" ItemsSource="{Binding Collections}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Margin="5" Background="Azure">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <TextBlock Text="{Binding GroupBoxName}" />
                    <ListBox Grid.Row="1" ItemsSource="{Binding Items}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <CheckBox IsChecked="{Binding IsChecked}" Content="{Binding ItemName}" />
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
TestListBox.DataContext = [an instance of GroupBoxCollection here];