0

我试图将项目动态添加到 ComboBox。

但它会抛出异常“在使用 ItemsSource 时操作无效。改为使用 ItemsControl.ItemsSource 访问和修改元素”。

在此处输入图像描述

namespace Trainning

{

public partial class ComboBox : Window
{
    int intex_count;

    public ComboBox()
    {
        this.InitializeComponent();         

        add_items();


    }

    public List<object> add_items()
    {
        List<object> items = new List<object>();

        items.Add("chandru");
        items.Add(83);

        com_add_remove.ItemsSource = items;
        com_add_remove.SelectedIndex = 0;

        return items;
    }
 private void btn_add_Click(object sender, RoutedEventArgs e)
    {

        com_add_remove.Items.Add(txt_item.Text);
         intex_count = com_add_remove.Items.Count;
        com_add_remove.SelectedIndex = intex_count - 1;

    }
4

2 回答 2

2

您的问题是,当您使用 时ItemsSource,您也不能手动将项目添加到同一组件中。因此,您必须手动使用ItemsSouce 添加和删除项目。

我会选择ItemsSource, 并进行以下更改:

代替:

com_add_remove.Items.Add(txt_item.Text);

和:

items.Add(txt_item.Text);

这意味着您必须将项目添加为类变量,而不仅仅是 add_items 方法中的局部变量,以便您也可以从中引用它btn_add_Click

您的另一个选择是更改 add_items 方法,以便添加项目而不是使用ItemsSource

代替:

com_add_remove.ItemsSource = items;

和:

items.ForEach( i => com_add_remove.Items.Add(i));
于 2012-06-04T12:07:01.283 回答
1

将组合框绑定到某种数据源之后,您应该只更改数据源。

您需要List<object> items = new List<object>();在您的类中声明,然后从列表中添加和删除项目。您的组合框将自动更新。

public partial class ComboBox : Window
{
  int intex_count;
  List<object> items;
  public ComboBox()
  {
    this.InitializeComponent();         



    //key_value();

    TextBox tb = new TextBox();
    tb.Height = 50;
    tb.Width = 100;
    tb.TextAlignment = TextAlignment.Center;
    LayoutRoot.Children.Add(tb);
    tb.Text = "Dynamic TextBox";
    tb.Margin = new Thickness(0, 145, 87, 0);
    tb.VerticalAlignment = VerticalAlignment.Top;
    tb.HorizontalAlignment = HorizontalAlignment.Right;
    tb.Padding = new Thickness(15, 15, 15, 15); //to center the textbox's text  

    items = new List<object>();
    add_items();
    com_add_remove.ItemsSource = items;
    com_add_remove.SelectedIndex = 0;
}

public List<object> add_items()
{
    //List<object> items = new List<object>();

    items.Add("chandru");
    items.Add(83);        

    return items;
}

private void btn_add_Click(object sender, RoutedEventArgs e)
{

     items.Remove(txt_item.Text);
     intex_count = items.Count;

}
于 2012-06-04T12:05:13.017 回答