我有模特:
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秒钟才能改变)。
所有想法?
答案 0 :(得分:3)
编写您自己的集合包装并将其用于Top100Songs属性
class SongCollection : ObservableCollection<Song>
{
public Refresh()
{
OnCollectionChanged(
new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
}