2

在我的主窗口中,我有一个将所有数据存储在其中的类(称为“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();但它不起作用..

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

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

4

1 回答 1

2

这是我按照 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();
于 2013-04-03T10:40:53.243 回答