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