我在WPF中有一个ComboBox将其ItemsSource属性绑定到一个返回IEnumerable of String的Property。绑定只是单向的。包含ComboBox数据的类实现INotifyPropertyChanged接口,并在Property更新后立即调用OnPropertyChanged(..)。当我保持ComboBox不变时,更改会正确传播。但是只要将ComboBox展开一次或选择一个值,就不再更新ItemsSource Collection中的更改。这种行为可能是什么原因?
继承人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属性更改的方法。添加数据包的方法通过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。
答案 0 :(得分:0)
最后,我使用ObservableCollection实现了Binding属性,在添加新数据包时跟踪密钥(因此Dictionary的每个键在此ObservableCollection中都有一个等价物)。我认为这不是一个令人满意的解决方案(因为你必须独立地跟踪两个集合)但它的工作方式是这样的。