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あります。

もう1つのオプションは、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 に答える