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