C # привязка данных в выпадающем списке - PullRequest
1 голос
/ 25 августа 2009

Я не могу понять следующие 2 проблемы, учитывая этот код. Я сопоставил комбинированный список с пользовательским объектом и хочу, чтобы каждый раз, когда выбранное значение изменялось в комбинированном окне, изменялся и пользовательский объект.

public partial class MainForm : Form
{
    private Person _person;
    public MainForm()
    {
        InitializeComponent();
        _person = new Person();

        //Populating the combox, we have this.comboBoxCities.DataSource = this.cityBindingSource;
        cityBindingSource.Add(new City("London"));
        cityBindingSource.Add(new City("Paris"));
        _person.BirthCity = new City("Roma");
        cityBindingSource.Add(_person.BirthCity);
        cityBindingSource.Add(new City("Madrid"));

        //Doing the binding
        comboBoxCities.DataBindings.Add("SelectedItem", _person, "BirthCity");
    }

    private void buttonDisplay_Click(object sender, EventArgs e)
    {
        MessageBox.Show("BirthCity=" + _person.BirthCity.Name);
    }

    private int i = 0;
    private void buttonAddCity_Click(object sender, EventArgs e)
    {
        City city = new City("City n°" + i++);
        cityBindingSource.Add(city);
        comboBoxCities.SelectedItem = city;
    }

}

public class Person
{
    private City _birthCity;
    public City BirthCity
    {
        get { return _birthCity; }
        set
        {
            Console.WriteLine("Setting birthcity : " + value.Name);
            _birthCity = value;
        }
    }
}

public class City
{
    public string Name { get; set; }
    public City(string name) { Name = name; }
    public override string ToString() { return Name; }
}

1 - почему, когда я вручную выбираю дважды (или более) другое значение в комбинированном ящике, я получаю только один вызов BirthCity. Устанавливается с последним выбранным значением (и этот вызов, похоже, срабатывает только тогда, когда комбинированный ящик потерял фокус)?

2 - почему, когда я нажимаю кнопку «Добавить город», а затем кнопку «Дисплей», выбранный город не отображается (не тот, который отображается в поле со списком)

1 Ответ

2 голосов
/ 25 августа 2009
почему, когда я вручную выбираю дважды (или больше) другое значение в комбинированном ящике, я получаю только один вызов BirthCity. Устанавливает последнее выбранное значение (и этот вызов, похоже, срабатывает только тогда, когда комбинированный ящик потерял фокус)

Так работает Привязка данных, данные перемещаются из элемента управления в свойство при проверке, а проверка происходит, когда элемент управления теряет фокус.

почему, когда я нажимаю кнопку «Добавить город», а затем кнопку «Дисплей», выбранный город не отображается (не тот, который отображается в поле со списком)

Я не знаю. Я создал простую форму (Visual C # Express 2008 с использованием .Net 3.5 SP1) и вставил ваш код почти дословно, и он работает, как и ожидалось: он показывает новый город в поле со списком.

Если вы добавите comboBoxCities.Focus (); до конца buttonAddCity_Click () вы убедитесь, что новый город помещен в _person.BirthCity раньше, чем в ValidateChildren ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...