Это возможно в C # 8:
Добавить прагму #nullable enable
в любом месте исходного файла или применить ее ко всему проекту ( источник ). Вы получите предупреждение: Nullable value type may be null
.
Если бы необходимо было изменить весь объект, имея в виду весь объект 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, обязательный список "уведомляется", когда что-то изменится, и все это будет таким образом работать.
вместо SearchComboBox.Refresh();
попробовать SearchComboBox.RefreshItems();
или SearchComboBox.ResetBindings();
Я думаю, что это - действительно последний, в котором Вы нуждаетесь.
Можно получить доступ к документации, поскольку это - участники здесь.