0

我的情况是,我有一个包含集合的集合对象:

public class GroupBoxColletion
{
    public string GroupBoxName;
    public list<CheckBox> CheckBoxName;
}

注意:我总共有 5 个 GroupBox,在每个 groupbox 中我需要创建 100 个复选框。

如何在 silverlight 4.0 中使用绑定技术创建它?

任何提示将不胜感激。

4

2 回答 2

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)。

于 2011-11-30T01:35:49.910 回答
0

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

public class GroupBoxCollection
{
    public string GroupBoxName;
    public List<bool> CheckBoxName;
}

这样,您可以将 CheckBoxName 集合的值绑定到带有包含 CheckBox 的 ItemTemplate 的 ItemsControl。

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

于 2011-11-30T00:51:36.950 回答