我在 WPF 中有一个组合框,将其 ItemsSource 属性绑定到返回字符串的 IEnumerable 的属性。绑定只是单向的。包含 ComboBox 数据的类实现 INotifyPropertyChanged 接口,并在属性更新后立即调用 OnPropertyChanged(..)。当我保持 ComboBox 不变时,更改会正确传播。但是一旦 ComboBox 展开一次或选择了一个值,ItemsSource 集合中的更改就不再更新。这种行为的原因可能是什么?
这是 XAML
<ComboBox Name="cmbSourceNames"
Grid.Row="0"
SelectedItem="{Binding Path=CurrentSource, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding Path=SourceAddresses, NotifyOnSourceUpdated=True}"/>
DataContext 在后面的代码中设置:
this.cmbSourceNames.DataContext = this._dpa;
而这个就是触发Property变化的Method。添加数据包的方法通过 BeginInvoke 委托给 Current Dispatcher。
private void DispatcherAddDataPacket(DataPacket dp)
{
ObservableCollection<DataPacket> dpList;
this._dpkts.TryGetValue(dp.SourceAddress, out dpList);
if (dpList == null)
{
dpList = new ObservableCollection<DataPacket>();
dpList.Add(dp);
this._dpkts.Add(dp.SourceAddress, dpList);
OnPropertyChanged("SourceAddresses");
}
else
{
dpList.Add(dp);
}
}
该属性将字典的键返回为 IEnumerable。