Подтвердить что ты не робот

Поделиться ComboBox DataSource

Могу ли я спросить, почему оба comboboxs запускают друг друга так, что обе имеют одинаковые значения? Не могу ли я поделиться одним списком и иметь 2 комбобокса с другим выделенным текстом?

private void Form1_Load(object sender, EventArgs e)
    {
        BindingList<string> list = new BindingList<string>();
        list.Add("A");
        list.Add("B");
        list.Add("C");
        list.Add("D");

        bind(cbo1, list);
        bind(cbo2, list);
    }

    private void bind(ComboBox combobox, BindingList<string> list)
    {
        // commented lines are in actual code,
        // but appears unimportant in this question
        //combobox.DropDownStyle = ComboBoxStyle.DropDown;
        //combobox.AutoCompleteSource = AutoCompleteSource.ListItems;
        //combobox.AutoCompleteMode = AutoCompleteMode.Suggest;
        combobox.DataSource = list;
        //combobox.Focus();
        //combobox.Text = string.Empty;
        //combobox.SelectedText = string.Empty;
    }

UPDATE: Хорошо, теперь я выяснил, что проблема заключается в том, что DataSource управляется некоторыми BindingContext и CurrencyManager для автоматической синхронизации списка. Но я чувствую, что кто-то должен знать, как отключить это поведение.

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

4b9b3361

Ответ 1

Вы можете "решить" его так:

// combobox.DataSource = list;
var curr = new BindingSource(list, null);        
combobox.DataSource = curr;

Существует связанный с каждой формой формальный BindingSource (Currencymanager) по умолчанию, который поддерживает синхронизацию 2 cbx. Но я не уверен, какие именно правила здесь. Я даже не уверен, что это хорошая идея или нет.

Для небольших списков я бы просто сделал отдельные копии.

Ответ 2

Вы не можете использовать тот же объект, что и источник данных для двух отдельных комбинированных полей. У вас должны быть list1 и list2, определенные и заполняющие каждое поле со списком каждого из них. Использование одного и того же источника данных означает, что выбор в одном поле со списком отражается в другом.