如何阅读动态添加的复选框?

时间:2010-04-18 05:56:42

标签: silverlight checkbox dynamic-controls

我正在向silverlight stackpanel对象动态添加复选框,如下所示:

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

如何回读这些控件以检测哪些控件被检查。

2 个答案:

答案 0 :(得分:3)

您可以使用数据绑定到复选框列表。像这样:

使用列表框创建检查列表:

 <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 = ....

答案 1 :(得分: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将为您添加到选项集合中的任何选项创建CheckBoxes。真正伟大的是,您现在可以询问选项集合选择了哪些选项:

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

使用数据绑定和模板是您应该在Silverlight / WPF中熟悉的技术。这是一个非常重要的概念,它可以让你在应用程序中做出惊人的事情。