0
votes

I have model:

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

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

I have a view with ListBox:

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

And ViewModel with list of Songs items. So, sometimes i want to refresh (redraw) the listbox. It's need to display that IsSelected is changed (No, i can't using INotifyPropertyChanged in model and setting it in viewmodel).

So how i can redraw a listbox in WP7? I can't find any Refresh or Update method for UIElements.

I tried calling this.OnPropertyChanged("Top100Songs"); but it doesn't work. I tried calling UpdateLayout - the same.

One way is setting DataContex for page to null and then revert to my ViewModel. It works, but is so long (about 5 secs. for changing).

So any ideas?

1

1 Answers

3
votes

Write your own collection wrapper and use it for the Top100Songs property

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