Один источник данных для нескольких элементов управления - PullRequest
5 голосов
/ 03 января 2012

У меня есть два ListBox в моем приложении winforms, я назначаю источник данных для них обоих следующим образом:

private void MakeMeasurementUnits()
{
    var units = new List<MeasurementUnit>
                    {
                        new MeasurementUnit {Name = "Current", SiUnit = "A"},
                        new MeasurementUnit {Name = "Voltage", SiUnit = "V"},
                        new MeasurementUnit {Name = "Time", SiUnit = "s"},
                        new MeasurementUnit {Name = "Temprature", SiUnit = "°C"}
                    };

    lbxXunit.DataSource = units;
    lbxYunit.DataSource = units;
}

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

Я обнаружил, что быстрое средство состоит в создании двух разных источников данных (одно и то же с другим именем)

Ответы [ 4 ]

5 голосов
/ 03 января 2012

Кажется, что окно списка кеширует источник привязки.Это поведение по умолчанию.Если вы хотите избежать этого, проще всего создать копию списка для привязки ко второму источнику данных:

lbxXunit.DataSource = units;
lbxYunit.DataSource = units.ToList();

Это полезно, когда у вас несколько представлений одних и тех же данных и вы хотитесинхронизировать выбор этих пунктов.

3 голосов
/ 03 января 2012

Да, это нормальное поведение. Это происходит потому, что элемент управления ListView использует объект BindingSource для отслеживания текущего выбранного элемента. (Список не может отслеживать выбранный элемент без BindingSource.)

По умолчанию DataSource в элементе управления WinForms использует BindingSource, созданный для него самой системой WinForms.

Подробнее о BindingSource можно узнать по адресу: http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

Здесь есть статья, которая тоже может помочь: http://blogs.msdn.com/b/bethmassi/archive/2007/09/19/binding-multiple-comboboxes-to-the-same-datasource.aspx

2 голосов
/ 03 января 2012

Вы отметили поведение по умолчанию / правильное поведение для элементов управления winforms.Вы можете достичь того, чего хотите, установив новый BindingContext для своего второго элемента управления списка, не создавая копию своего источника данных.

BindingContext

1 голос
/ 03 января 2012

Это правильное поведение. Управление datasource в WindowsForms отслеживает выбранный элемент в элементе управления и манипулирует связанными данными.

Разрешение, которое вы уже нашли: назначьте 2 разных data sources objects этим элементам управления.

...