1

次のように、チェックボックスを Silverlight スタックパネル オブジェクトに動的に追加しています。

foreach (String userName in e.Result)
{
    CheckBox ch = new CheckBox();
    ch.Name = userName;
    ch.Content = userName;
    ContentStackPanel.Children.Add(ch);
}

これらのコントロールを読み戻して、チェックされているコントロールを検出するにはどうすればよいですか。

4

2 に答える 2

3

チェックボックスリストにデータバインディングを使用できます。このようなもの:

Listbox を使用してチェック リストを作成します。

 <ListBox x:Name="chkList" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" >
                    <CheckBox Content="{Binding userName}" IsChecked="{Binding Checked, Mode=TwoWay}"></CheckBox>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

次に、コードで chklist itemSource をオブジェクトを使用して ObservableCollection に設定するだけです

chkList.ItemsSource = ....
于 2010-04-18T06:47:09.037 に答える
1

このようなコードでチェックボックスを作成することはおそらく避けるべきです。あなたにとって役立つかもしれないものは、チェックボックスのミニ「ViewModel」です。このようなもの:

public class Option
{
   public string Text {get; set;}
   public bool IsChecked {get; set;}
}

次に、次のようにこれらのオプションのコレクションを作成できます。

var options = new ObservableCollection<Option>();

これが設定されたら、ObservableCollection を ItemsControl にバインドできます。

<ItemsControl ItemsSource="{Binding options}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding Text}" IsChecked="{Binding IsChecked}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

その XAML は、オプション コレクションに追加したオプションのチェックボックスを作成します。本当に素晴らしいことは、どのオプションが選択されているかをオプション コレクションに尋ねることができるようになったことです。

var selectedNames = from option in options
                    where option.IsChecked
                    select option.Text;

データ バインディングとテンプレートの使用は、Silverlight/WPF で習得する必要がある手法です。これは非常に重要な概念であり、アプリケーションで驚くべきことができるようになります。

于 2010-04-18T16:59:34.043 に答える