添加项目C#WPF后,Combobox不会刷新

时间:2013-04-03 09:45:36

标签: c# wpf binding combobox observablecollection

在我的主窗口中,我有一个用于存储所有数据的类(称为“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初学者

1 个答案:

答案 0 :(得分: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();