2017-02-22 8 views
0

У меня есть BindingList из objectA S, связанные с comboBox_1.DataSource (и имя объекта, как DisplayMember). Мой objectA состоит из objectZ и списка objectX s. Форма связана с одним конкретным элементом из этого списка objectX. На этой форме есть много других элементов управления, которые показывают значения различных свойств objectX.
Вот код для визуализации, что:Reflect изменения от BindingList.List.Element между элементами управления и BindingList

class objectA 
{ 
    class objectZ 
    { 
     public int Count { get; set; } 
    } 
    class objectX 
    { 
     public string Prop1 { get; set; } 
     public bool Prop2 { get; set; } 
    } 

    public string Name { get; set; } 
    public objectZ Z { get; set; } 
    public List<objectX> listX { get; set; } 
} 

BindingList<objectA> listA = new BindingList<objectA>(); 
comboBox_1.DataSource = listA; 
comboBox_1.DisplayMember = "Name"; 

Как сделать так, objectX значения в других элементах управления изменяется в соответствии с выбранным в данный момент значения в comboBox, сохраняя BindingList свойства чтения/записи данных «на в- идти'? Чтобы выразить это в коде (он же, что я пытаюсь добиться):

textBox_1.Text = listA.GetWantedObjectX().Prop1; 
checkBox_1.Checked = listA.GetWantedObjectX().Prop2; 

void checkBox_1_CheckedChanged() 
{ 
    listA.GetWantedObjectX().Prop2 = checkBox_1.Checked; 
} 

Я предполагаю, что я нужен objectA.objectX currentObject свойство для управления данными, а затем он был бы:

currentObject = listA.GetWantedObjectX(); 
checkBox_1.Checked = currentObject.Prop2; 

Но тогда изменения, внесенные в currentObject, не отражались бы в listaA, и мне нужно было бы создать sth, как кнопка сохранения, не так ли? Есть ли более «отзывчивый» способ?

ответ

0

Хотя это не очень хорошее решение (никто не предоставил лучшего), я в основном придерживался этого currentObject и контролировал все внутри события comboBox1_SelectedIndexChanged. Вот код, который:

objectA.objectX currentObject = null; 
int previousObjectIndex = 0; 
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (currentObject == null) 
    { 
     currentObject = listA[comboBox1.SelectedIndex].GetWantedObjectX(); 
     textBox1.Text = currentObject.Prop1; 
    } 
    else 
    { 
     currentObject.Prop1 = textBox1.Text; 

     if (!listA[previousObjectIndex].listX.Any(x => x.Prop1 == currentObject.Prop1)) 
      listA[previousObjectIndex].listX.Add(currentObject); 

     currentObject = listA[comboBox1.SelectedIndex].GetWantedObjectX(); 

     if (currentObject == null) 
      currentObject = new objectA.objectX(); 

     previousObjectIndex = comboBox1.SelectedIndex; 

     textBox1.Text = currentObject.Prop1; 
    } 
} 

Конечно, это не включает в себя обработку в objectZ, где механик похож нужно было бы ввести.