Почему виджеты обновляются одновременно при назначении одному источнику данных? - PullRequest
2 голосов
/ 09 марта 2012

У меня очень простой вопрос об источниках данных Windows Forms.

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

У меня нет дополнительного кода для этого поведения пользовательского интерфейса, поэтому мне интересно, как это работает.

 var persons = new List<Person>
                              {
                                  new Person {Id = 1, Age = 10, Name = "Alex"},
                                  new Person {Id = 2, Age = 12, Name = "Boris"},                                 
                              };

   //     ListBox 
   lbPersons.DisplayMember = "Name";           
   lbPersons.DataSource = persons;

    //    ComboBox
    cbPersons.DisplayMember = "Name";
    cbPersons.DataSource = persons; 

Пожалуйста, объясните, как синхронно изменяется выбранный элемент управления?

1 Ответ

1 голос
/ 09 марта 2012

Я обнаружил некоторые похожие проблемы в сети.Я не совсем понимаю, как это работает, но я сделаю все возможное:

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

Вместо этого, когда вы связываете источники данных, присвойте каждому новый BindingContext:

lbPersons.DisplayMember = "Name";           
lbPersons.DataSource = persons;
lbPersons.BindingContext = new BindingContext();

cbPersons.DisplayMember = "Name";
cbPersons.DataSource = persons; 
cbPersons.BindingContext = new BindingContext();

Iнашел эту информацию в форуме (ссылка ниже), где они подтверждают проблему и имеют решение.Мне нужно больше читать об этом, но больше информации можно найти в MSDN по адресу:

http://bytes.com/topic/c-sharp/answers/850851-multiple-controls-bound-same-data-source http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingcontext.aspx

РЕДАКТИРОВАТЬ в соответствии с:

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.bindingcontext(v=vs.71).aspx

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

Также:

(http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingcontext.bindingcontext(v=vs.71).aspx)

Например, если у вас есть два объекта BindingManagerBase (из двух разных объектов BindingContext), вы можете установить для свойств Position каждого BindingManagerBase разные значения, в результате чего каждый набор элементов управления с привязкой к данным будет отображать разные значения из одного и того же источника данных.

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