0

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

4

1 回答 1

0

最后,我使用 ObservableCollection 实现了绑定属性,该属性在添加新数据包时跟踪键(因此字典的每个键在此 ObservableCollection 中都有一个等效项)。我认为这并不是一个真正令人满意的解决方案(因为您必须独立跟踪两个集合),但它的工作原理是这样的。

于 2013-06-21T13:33:33.163 回答