我的情况是,我有一个包含集合的集合对象:
public class GroupBoxColletion
{
public string GroupBoxName;
public list<CheckBox> CheckBoxName;
}
注意:我总共有 5 个 GroupBox,在每个 groupbox 中我需要创建 100 个复选框。
如何在 silverlight 4.0 中使用绑定技术创建它?
任何提示将不胜感激。
我的情况是,我有一个包含集合的集合对象:
public class GroupBoxColletion
{
public string GroupBoxName;
public list<CheckBox> CheckBoxName;
}
注意:我总共有 5 个 GroupBox,在每个 groupbox 中我需要创建 100 个复选框。
如何在 silverlight 4.0 中使用绑定技术创建它?
任何提示将不胜感激。
你想在这里分开你的担忧。
您的模型将具有如下结构:
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; }
}
您的 XAML 将看起来像这样。我在这里没有使用 GroupBoxes,因为 SL4 默认情况下没有它们。我将改用 Grid,但您可以修改代码以自己使用它们 :)
<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];
当然,您可以通过按照您想要的方式设置样式/模板,并可能使用 ListBoxes 以外的其他东西来美化它,但这是总体思路。
笔记:
根据您的需要,您可能还需要使您的模型实现 INotifyPropertyChanged 和/或使用 ObservableCollection 而不是 List。如果您希望您的视图在用户选中/取消选中任何复选框时修改您的模型,您可能还需要使用 TwoWay 数据绑定。
如果您想按原样测试我的示例以查看发生了什么,请确保在将其设置为 DataContext之前填充您的 GroupBoxCollection 实例(您设置为 TestListBox的 DataContext)。
我知道您要做什么,但我不确定这是实现它的正确方法。如果您想在 Silverlight 中使用 DataBinding,那么您应该有要绑定的数据。不幸的是,CheckBox 本身并不是一段数据,而是一个用户控件。我建议创建一个可以绑定到复选框的数据集合。
public class GroupBoxCollection
{
public string GroupBoxName;
public List<bool> CheckBoxName;
}
这样,您可以将 CheckBoxName 集合的值绑定到带有包含 CheckBox 的 ItemTemplate 的 ItemsControl。
我希望这能有所帮助。如果您需要更多信息,只需写评论,我会在更多帮助下编辑此答案。