如何在SilverLight 3项目中刷新ListBox.ItemsSource?

我是我的XAML,我有一个ListBox定义

               

在代码隐藏中,我定义了一个模块级的ObservableCollection设备。

 private ObservableCollection devices = new ObservableCollection(); 

在OnNavigatedTo事件中,我将集合绑定到列表框

 lstStatus.ItemsSource = devices; 

该集合很可能不会增长或缩小,但其内部的对象会一直在变化。 无论出于何种原因,当我执行以下代码时,列表不会更新:

 Device selectedDevice = null; foreach (Device dv in devices) { if (dv.IsTrunk) { selectedDevice = dv; break; } } if (selectedDevice != null) selectedDevice.StatusName = DateTime.Now.ToString(); else throw new Exception(); 

事实上,我能够让它工作的唯一方法就是伪造它,从列表中删除项目然后再添加它。 显然不是长期的解决方案。

我错过了什么?

听起来你在Device对象中缺少INotifyPropertyChanged实现。

例如:-

  public class Device : INotifyPropertyChanged { private string _StatusName; public string StatusName { get { return _StatusName; } set { _StatusName = value; NotifyPropertyChanged("StatusName"); } } private void NotifyPropertyChanged(string name) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(name)); } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; #endregion } 

这将使属性更改时通知绑定到特定属性的TextBlocks。