选择值后,ComboBox ItemsSource绑定未更新

时间:2013-06-12 18:49:16

标签: c# wpf binding combobox

我在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。

1 个答案:

答案 0 :(得分:0)

最后,我使用ObservableCollection实现了Binding属性,在添加新数据包时跟踪密钥(因此Dictionary的每个键在此ObservableCollection中都有一个等价物)。我认为这不是一个令人满意的解决方案(因为你必须独立地跟踪两个集合)但它的工作方式是这样的。