Обновление связанного с данными ComboBox

Это возможно в C # 8:

Добавить прагму #nullable enable в любом месте исходного файла или применить ее ко всему проекту ( источник ). Вы получите предупреждение: Nullable value type may be null.

7
задан Community 23 May 2017 в 12:30
поделиться

2 ответа

Если бы необходимо было изменить весь объект, имея в виду весь объект SearchData, то bindinglist имел бы знание этого изменения, и поэтому корректные события внутренне запустить, и поле комбинированного списка обновит. ОДНАКО, так как Вы только обновляете одно свойство, bindinglist понятия не имеет, что что-то изменилось.

То, что необходимо сделать, имеют реализацию класса SearchData INotifyPropertyChanged. Вот быстрый образец, который я записал для демонстрации:

public class Dude : INotifyPropertyChanged
    {
        private string name;
        private int age;

        public int Age
        {
            get { return this.Age; }
            set
            {
                this.age = value;
                if (this.PropertyChanged != null)
                {
                    this.PropertyChanged(this, new PropertyChangedEventArgs("Age"));
                }
            }
        }
        public string Name
        {
            get
            {
                return this.name;
            }

            set
            {
                this.name = value;
                if (this.PropertyChanged != null)
                {
                    this.PropertyChanged(this, new PropertyChangedEventArgs("Name"));
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;


    }

И вот некоторый код для тестирования:

        private void button1_Click(object sender, EventArgs e)
        {
            //Populate the list and binding list with some random data  
            List<Dude> dudes = new List<Dude>();
            dudes.Add(new Dude { Name = "Alex", Age = 27 });
            dudes.Add(new Dude { Name = "Mike", Age = 37 });
            dudes.Add(new Dude { Name = "Bob", Age = 21 });
            dudes.Add(new Dude { Name = "Joe", Age = 22 });

            this.bindingList = new BindingList<Dude>(dudes);
            this.comboBox1.DataSource = bindingList;
            this.comboBox1.DisplayMember = "Name";
            this.comboBox1.ValueMember = "Age";

        }


    private void button3_Click(object sender, EventArgs e)
    {
        //change selected index to some random garbage
        this.bindingList[this.comboBox1.SelectedIndex].Name = "Whatever";
    }

Так как мой класс теперь реализует INotifyPropertyChanged, обязательный список "уведомляется", когда что-то изменится, и все это будет таким образом работать.

11
ответ дан 6 December 2019 в 14:11
поделиться

вместо SearchComboBox.Refresh();

попробовать SearchComboBox.RefreshItems();

или SearchComboBox.ResetBindings();

Я думаю, что это - действительно последний, в котором Вы нуждаетесь.

Можно получить доступ к документации, поскольку это - участники здесь.

2
ответ дан 6 December 2019 в 14:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: