添加组合框项目中的异常

时间:2012-06-04 12:01:45

标签: c# wpf

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

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

enter image description here

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;

    }

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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;

}