Combobox не обновляется после добавления элементов С# WPF

Вопрос: В моем главном окне у меня есть класс, в котором хранятся все мои данные (например, "Measconsettings"). Этот класс ("Measconsettings") содержит ObservableCollection "DeviceDefinitionList" другого класса "DeviceDefinition", ObservableCollection DeviceDefinitionList. Когда я нажимаю кнопку в моем MainWindow, новое окно создается с помощью datacontex = Measconsettings. В этом новом окне есть combobox, который ItemsSource привязан к "Measconsettings.DeviceDefinitionList".

Вопрос:

В моем главном окне у меня есть класс, в котором хранятся все мои данные (например, “Measconsettings”). Этот класс (“Measconsettings”) содержит ObservableCollection “DeviceDefinitionList” другого класса “DeviceDefinition”,

ObservableCollection<DeviceDefinition> DeviceDefinitionList.

Когда я нажимаю кнопку в моем MainWindow, новое окно создается с помощью datacontex = Measconsettings.

В этом новом окне есть combobox, который ItemsSource привязан к “Measconsettings.DeviceDefinitionList”.

<ComboBox Grid.Row=»2″ Grid.Column=»2″ Margin=»2,0″ Name=»CboDeviceDefinitionList» ItemsSource=»{Binding Path=DeviceDefinitionList}»/>

Моя проблема в том, что combobox не обновляется автоматически при добавлении элемента.

Мне нужно закрыть новое окно и снова нажать кнопку, чтобы открыть его, и только затем он показывает элементы в выпадающем списке.

Я попытался добавить CboDeviceDefinitionList.Items.Refresh(); Но это не работает..

Только когда я добавляю CboDeviceDefinitionList.ItemsSource = orgMeasConSettings.DeviceDefinitionList; сразу после добавления элементов в ObservableCollection, они сразу появляются.

Любые идеи или советы о том, как правильно привязать к combobox? PS: Я начинаю wpf

Лучший ответ:

Это мое решение после внедрения INotifyPropertyChanged, как было предложено manish.

EDIT: Теперь это работает!

public class MeasConSettings : INotifyPropertyChanged { private ObservableCollection<DeviceDefinition> mDeviceDefinitionList; private DeviceDefinition mSelectedDeviceDefinition; public ObservableCollection<DeviceDefinition> DeviceDefinitionList { get { return mDeviceDefinitionList; } set { mDeviceDefinitionList = value; } } public DeviceDefinition SelectedDeviceDefinition { get { return mSelectedDeviceDefinition; } set { mSelectedDeviceDefinition = value; NotifyPropertyChanged(«SelectedDeviceDefinition»); } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string property) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(property)); } } }

КОД XAML:

<ComboBox Grid.Row=»2″ Grid.Column=»2″ Margin=»2,0″ Name=»CboDeviceDefinitionList» ItemsSource=»{Binding Path=DeviceDefinitionList}» SelectedItem=»{Binding Path=SelectedDeviceDefinition}»/>

КОД для добавления элемента:

orgMeasConSettings.DeviceDefinitionList.Clear(); foreach (DeviceDefinition deviceDefinition in newSettings.DeviceDefinitionList) { orgMeasConSettings.DeviceDefinitionList.Add(deviceDefinition); } orgMeasConSettings.SelectedDeviceDefinition = newSettings.DeviceDefinitionList.FirstOrDefault();

Оцените статью
Добавить комментарий