2012-06-04 5 views
0

나는 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; 

    } 
+0

당신은 넣을 수없는 소스 변경

귀하의 다른 옵션은 너무 ItemsSource를 사용하는 항목 istead을 추가 add_items 방법을 변경하는 것입니다 동시에 소스에서 변경하고 수행하려는 경우 observablecollection처럼 소스를 간단하게 업데이트 할 수 있습니다. – JSJ

답변

2

귀하의 문제는 당신이 ItemsSource 사용할 때, 당신은 또한 같은 구성 요소에 수동으로 항목을 추가 할 수 있다는 것입니다. 따라서 ItemsSouce또는을 수동으로 추가하고 제거해야합니다.

내가 ItemsSource와 함께 갈 것이다, 다음과 같은 변화 :

교체 :

com_add_remove.Items.Add(txt_item.Text); 

로 :

items.Add(txt_item.Text); 

대신 클래스 변수로 항목을 추가해야 의미 add_items 메쏘드 안에있는 지역 변수를 가지고 여러분이 btn_add_Click에서 참조 할 수 있도록하십시오. 대체

을 :

com_add_remove.ItemsSource = items; 

로 :

items.ForEach(i => com_add_remove.Items.Add(i)); 
+0

대단히 감사합니다 Mr.Øyvind Knobloch-Bråthen .... –

+0

도와 드릴 수 있습니다. –

+0

please Øyvind Knobloch-Bråthen이 링크를 참조하십시오. .http : //stackoverflow.com/questions/10880229/issue-in-creating-combobox-dynamically and http://stackoverflow.com/questions/10877616/how-to-use-on-screen-keyboard-in-whole -창문. 나는 여기에 질문을 올렸습니다. 나는 그 문제를 해결할 수있는 사람 만 알고 있습니다. –

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; 

}