我正在向silverlight stackpanel对象动态添加复选框,如下所示:
foreach (String userName in e.Result)
{
CheckBox ch = new CheckBox();
ch.Name = userName;
ch.Content = userName;
ContentStackPanel.Children.Add(ch);
}
如何回读这些控件以检测哪些控件被检查。
答案 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中熟悉的技术。这是一个非常重要的概念,它可以让你在应用程序中做出惊人的事情。