首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用ComboBox作为ItemTemplate时,遍历ItemTemplate项

当使用ComboBox作为ItemTemplate时,遍历ItemTemplate项
EN

Stack Overflow用户
提问于 2013-10-14 17:47:13
回答 1查看 1.7K关注 0票数 1

我使用带有ComboBox的CheckBox作为ItemTemplate,并希望迭代所有项,获取它们的选中状态,如果选中为true,则将它们的内容写入字符串。问题是,我正在使用SqlDataReader来填充和绑定数据库中的ComboBox,并且无法找到一种访问items属性的方法。

代码语言:javascript
复制
<ComboBox>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CheckBox Click="CheckBox_Click" Content="{Binding}" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" Tag="{RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

我尝试将ComboBox项转换为对它们的click事件的CheckBoxes,方法如下:

代码语言:javascript
复制
private void CheckBox_Click(object sender, RoutedEventArgs e)
{    
    for (int i = 0; i < myComboBox.Items.Count; i++)
    {
        CheckBox cb = (myComboBox.Items[i] as CheckBox);
        if (cb.IsChecked == true)
        {
            myString += "," + myComboBox.SelectedItem.ToString() + "";
        }
    }
}

但是cb总是返回NULL。我猜这是带有IsChecked属性绑定的东西。

我想让它正常工作,但是我不想创建一个对象/类来填充组合框,因为我需要用数据库来填充它。我真的很感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-14 18:26:42

您可以这样做(我不坚持MVVM模式),这是动态编写的:

代码语言:javascript
复制
 public ArrayList List { get; set; }
        public MainWindow()
        {
            InitializeComponent();


            SqlDataReader rdr = cmd.ExecuteReader();
            List = new ArrayList();
            while (rdr.Read()){
                List.Add(new Class{ Id = rdr.GetString(0), Value = rdr.GetString(1), IsChecked= rdr.GetString(1) as bool}); //this class will contain the same data schema in your datareader but using properties 
            }
            rdr.Close();
            DataContext = List;
        }

  <ComboBox Name="ComboBox" ItemsSource="{Binding}" >
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <CheckBox Tag="{Binding Id}" Content="{Binding Name}" IsChecked="{Binding IsChecked}"/>
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>

        </ComboBox>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19366040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档