【问题标题】:How to read dynamical added check box?如何读取动态添加的复选框?
【发布时间】:2010-04-19 00:59:34
【问题描述】:

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

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

如何回读这些控件以检测它们中的哪些被选中。

【问题讨论】:

    标签: silverlight checkbox dynamic-controls


    【解决方案1】:

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

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

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

    【讨论】:

    • 我会犹豫在这里建议一个列表框。 OP 正在填充 StackPanel,而 ListBox 是一个更大的野兽,具有这里不需要的选择和鼠标悬停行为。相反,ItemsControl 是更适合 @Manoj 使用的构造。
    【解决方案2】:

    您应该避免在这样的代码中创建复选框。可能对您有用的是复选框的迷你“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 for ever 选项您添加到您的选项集合。真正很棒的是,您现在可以询问您的 options collection 选择了哪些选项:

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

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

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多