К вопросу о привязках (Binding, DataSource): как разделить?
От: Magic Master Россия  
Дата: 07.10.05 08:30
Оценка:
Здравия вам!

Есть некий общий список:
    internal static ArrayList PhoneAbons;

И есть формы, которые используют этот список в двух контролах:
    private System.Windows.Forms.ComboBox BackList;
    private System.Windows.Forms.ComboBox PhoneList;
...
    PhoneList.DataSource = PhoneAbons;
    BackList.DataSource = PhoneAbons;

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

И ещё..
    PhoneAbons.Add(ctl);
    PhoneList.SelectedItem = ctl;

Не работает!!! Отладчик показывает, что в PhoneAbons элемент добавлен, а в PhoneList.Items его нету!
Однако следующий вызов (PhoneList.SelectedItem = ctl) — некоторое время спустя уже срабатывает.
Неужели механизм привязок тут совершенно бесполезен?

07.10.05 13:52: Перенесено модератором из '.NET' — AndrewVK
---------
Антон.
Re: К вопросу о привязках (Binding, DataSource): как раздели
От: vitaly_spb Россия  
Дата: 07.10.05 08:39
Оценка:
MM>
MM>    private System.Windows.Forms.ComboBox BackList;
MM>    private System.Windows.Forms.ComboBox PhoneList;
MM>...
MM>    PhoneList.DataSource = PhoneAbons;
MM>    BackList.DataSource = PhoneAbons;
MM>

MM>В результате получается, что выбирая элемент списка в одном контроле, другой дублирует это действие.

Не очень понятно: что значит дублирует? Значение SelectedItem-то должны быть различные для 2-х различных инстансов контролов.

MM>
MM>    PhoneAbons.Add(ctl);
MM>    PhoneList.SelectedItem = ctl;
MM>

MM>Не работает!!! Отладчик показывает, что в PhoneAbons элемент добавлен, а в PhoneList.Items его нету!

А ты выполнил

PhoneList.DataSource = PhoneAbons;
PhoneList.Databind();


?
...Ei incumbit probatio, qui dicit, non qui negat...
Re[2]: К вопросу о привязках (Binding, DataSource): как разд
От: Magic Master Россия  
Дата: 07.10.05 08:54
Оценка:
Здравствуйте, vitaly_spb, Вы писали:

MM>>
MM>>    private System.Windows.Forms.ComboBox BackList;
MM>>    private System.Windows.Forms.ComboBox PhoneList;
MM>>...
MM>>    PhoneList.DataSource = PhoneAbons;
MM>>    BackList.DataSource = PhoneAbons;
MM>>

MM>>В результате получается, что выбирая элемент списка в одном контроле, другой дублирует это действие.
_>Не очень понятно: что значит дублирует? Значение SelectedItem-то должны быть различные для 2-х различных инстансов контролов.
Именно, что это два разных инстанса контрола, но привязанны к одному списку. И в результате их SelectedItem синхронизован.
т.е. нельзя выбрать разные элементы в этих контролах. Выбираешь в одном, в другом выбирается автоматически.

MM>>
MM>>    PhoneAbons.Add(ctl);
MM>>    PhoneList.SelectedItem = ctl;
MM>>

MM>>Не работает!!! Отладчик показывает, что в PhoneAbons элемент добавлен, а в PhoneList.Items его нету!

_>А ты выполнил


_>
_>PhoneList.DataSource = PhoneAbons;
_>PhoneList.Databind();
_>


нет. System.Windows.Forms.ComboBox.Databind() не существует.
---------
Антон.
Re: К вопросу о привязках (Binding, DataSource): как раздели
От: Andrbig  
Дата: 07.10.05 09:42
Оценка:
Здравствуйте, Magic Master, Вы писали:

MM>Подскажите, пожалуйста, как это обойти? А то приходится тупо вести список в каждом контроле


У кого-нить из них надо сделать:

xxx.BindingContext = new BindingContext();
Re[2]: К вопросу о привязках (Binding, DataSource): как разд
От: Magic Master Россия  
Дата: 07.10.05 16:05
Оценка:
Здравствуйте, Andrbig, Вы писали:

A>У кого-нить из них надо сделать:

A>
A>xxx.BindingContext = new BindingContext();
A>

Помогло. Но не полностью. Теперь списки разделены, но изменение в ArrayList не отображается в контроле, которому выделил new BindingContext(). Т.е. этот контрол не синхронизуется теперь вообще.

И второй вопрос с этим так же связан — так как, видимо, сразу после изменения ArrayList там тоже не происходит синхронизация в контроле. Но происходит позже. Как её форсировать?
---------
Антон.
Re[2]: К вопросу о привязках (Binding, DataSource): как разд
От: Аноним  
Дата: 07.10.05 16:22
Оценка:
] сразу после изменения ArrayList там тоже не происходит синхронизация в контроле. Но происходит позже. Как её форсировать?

см.
http://www.gotdotnet.ru/Forums/Windows/211960.aspx
---
мои работы (конкурс 2005): LayeredWindow, Lens, MenuBuilder, Win32ResourceManager, Html2XmlConverter, DropDownHolder (Popup).


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.