【问题标题】:exception in add combobox item添加组合框项目中的异常
【发布时间】:2014-06-09 01:58:47
【问题描述】:

我尝试将项目动态添加到 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;

    }

【问题讨论】:

  • 如果您希望在源代码中进行更改,则不能同时放置源代码和更改,并且简单地使该源代码像 observablecollection 一样可更新。

标签: c# wpf


【解决方案1】:

您的问题是,当您使用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));

【讨论】:

【解决方案2】:

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

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

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;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多