Silverlight: Как динамически создавать флажки внутри GroupBox из коллекций коллекций? - PullRequest
0 голосов
/ 29 ноября 2011

Мой случай такой: у меня есть объект коллекции, который содержит коллекцию:

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

Примечание: у меня всего 5 групповых ящиков, и в каждой групповой коробке мне нужно создать 100 флажков.

Как я могу создать это, используя технику переплета в silverlight 4.0?

Любые советы будут очень благодарны.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2011

Вы хотите отделить свои проблемы здесь.


Ваша модель будет иметь такую ​​структуру:

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, если вы хотите, чтобы ваш вид изменил вашу модель, когда пользователь устанавливает или снимает какие-либо флажки.

Если вы хотите проверить мой пример как есть , чтобы увидеть, что произойдет, убедитесь, что вы заполнили свой экземпляр GroupBoxCollection (который вы задали как DataContext of TestListBox) * за 1024 * до , который вы установили это как DataContext.

0 голосов
/ 30 ноября 2011

Я понимаю, что вы пытаетесь сделать, но я не уверен, что это правильный путь для достижения этого.Если вы хотите использовать DataBinding в Silverlight, у вас должны быть данные для привязки.К сожалению, CheckBox сам по себе не часть данных, а пользовательский контроль.Я бы предложил создать коллекцию данных, которую можно связать с CheckBoxes.

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

Таким образом, вы можете связать значения коллекции CheckBoxName с ItemsControl с ItemTemplate, который содержит CheckBox.

Надеюсь, это немного поможет.Если вам нужна дополнительная информация, просто напишите комментарий, и я отредактирую этот ответ с большей помощью.

...