在主窗口中,有一个类,我在其中存储所有数据(称为“ 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();