在主窗口中,有一个类,我在其中存储所有数据(称为“ Measconsettings”)。此类(“ Measconsettings”)包含另一个类别“ DeviceDefinition”的ObservableCollection“ DeviceDefinitionList”

ObservableCollection<DeviceDefinition> DeviceDefinitionList

当我按下MainWindow中的按钮时,将使用datacontex = Measconsettings创建一个新窗口。

在这个新窗口中,有一个组合框,ItemsSource绑定到“ Measconsettings.DeviceDefinitionList”。

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


我现在的问题是,添加项目时组合框不会自动更新。

我需要关闭新窗口,然后再次按按钮将其打开,然后才显示组合框中的项目。

我尝试添加CboDeviceDefinitionList.Items.Refresh();,但是它不起作用。

只有在将项目添加到ObservableCollection之后立即添加CboDeviceDefinitionList.ItemsSource = orgMeasConSettings.DeviceDefinitionList;时,它们才会立即显示。

有关如何正确绑定到组合框的任何想法或技巧? PS:我是wpf初学者

最佳答案

这是我根据manish的建议实现INotifyPropertyChanged之后的解决方案。

编辑:现在可以了!

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();

10-06 00:04