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];