在wp7中刷新列表框

时间:2012-03-13 07:40:10

标签: silverlight windows-phone-7 mvvm listbox refresh

我有模特:

public class Song
{
        public int ContentID { get; set; }

        public bool IsSelected
        {
            get
            {
                    var song = PlayerHelper.ReadNowPlaying();
                    return song.Id == ContentID;
            }
        }
}

我有一个ListBox视图:

<ListBox x:Name="songsLstBox" ItemsSource="{Binding Top100Songs}" />

带有歌曲项目列表的ViewModel。所以,有时我想刷新(重绘)列表框。需要显示IsSelected已更改(不,我不能在模型中使用INotifyPropertyChanged并在viewmodel中设置它)。

那我怎么能在WP7中重绘一个列表框呢?我找不到任何UIElements的Refresh或Update方法。

我试着打电话给.OnPropertyChanged(“Top100Songs”);但它不起作用。我试过调用UpdateLayout - 同样的。

一种方法是将页面的DataContex设置为null,然后还原为我的ViewModel。它可以工作,但是很长(大约5秒钟才能改变)。

所有想法?

1 个答案:

答案 0 :(得分:3)

编写您自己的集合包装并将其用于Top100Songs属性

class SongCollection : ObservableCollection<Song>
{
  public Refresh()
  {
    OnCollectionChanged(
      new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
  }
}