【问题标题】:Refresh listbox in wp7wp7刷新列表框
【发布时间】:2012-03-29 14:50:58
【问题描述】:

我有模特:

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 方法。

我尝试调用 this.OnPropertyChanged("Top100Songs");但它不起作用。我尝试调用 UpdateLayout - 同样。

一种方法是将页面的 DataContex 设置为 null,然后恢复为我的 ViewModel。它可以工作,但是太长了(大约 5 秒用于更改)。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!这行得通。但几乎没有什么变化,而不是 ObservableCollection 我使用 NotifyPropertyChangedBase, IList>, IList, INotifyCollectionChanged
    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多