我有型号:
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并在视图模型中设置它)。
那么如何在WP7中重新绘制列表框呢?找不到UIElements的任何Refresh或Update方法。
我试着这样称呼它。OnPropertyChanged("百强歌曲");但它不起作用。我试着调用UpdateLayout-同样。
一种方法是将页面的DataContex设置为null,然后恢复到我的ViewModel。它有效,但时间太长(大约5秒)。
有什么想法吗?
编写自己的集合包装并将其用于Top100Songs属性
class SongCollection : ObservableCollection<Song>
{
public Refresh()
{
OnCollectionChanged(
new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
}