0

私の場合は、次のようなコレクションを含むコレクション オブジェクトがあります。

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

注: 合計 5 つのグループ ボックスがあり、各グループ ボックスに 100 個のチェック ボックスを作成する必要があります。

Silverlight 4.0 のバインド技術を使用してこれを作成するにはどうすればよいですか?

どんなヒントでも大歓迎です。

4

2 に答える 2

0

あなたがやろうとしていることはわかりますが、これがそれを達成するための正しい方法であるかどうかはわかりません. Silverlight で DataBinding を使用する場合は、バインドするデータが必要です。残念ながら、CheckBox 自体はデータではなく、ユーザー コントロールです。チェックボックスにバインドできるデータ コレクションを作成することをお勧めします。

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

このようにして、CheckBoxName コレクションの値を、CheckBox を含む ItemTemplate を使用して ItemsControl にバインドできます。

これが少し役立つことを願っています。さらに情報が必要な場合は、コメントを書いてください。この回答を編集して、より多くの助けを借ります。

于 2011-11-30T00:51:36.950 に答える
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 は次のようになります。SL4 にはデフォルトで GroupBox がないため、ここでは GroupBox を使用していません。代わりに 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];

もちろん、必要に応じてスタイルを設定/テンプレート化したり、ListBox 以外のものを使用したりすることで、これをきれいにすることができますが、それが全体的な考え方です。

ノート:

必要に応じて、モデルに INotifyPropertyChanged を実装したり、List の代わりに ObservableCollection を使用したりする必要がある場合もあります。ユーザーがチェックボックスのいずれかをチェック/チェック解除したときにビューでモデルを変更する場合は、TwoWay データバインディングを使用する必要がある場合もあります。

私のサンプルをそのままテストして何が起こるかを確認したい場合は、DataContext として設定する前に、GroupBoxCollection (TestListBox の DataContext として設定したもの) のインスタンスを設定してください。

于 2011-11-30T01:35:49.910 に答える