使用自定义ItemsSource刷新ListBox的最简单方法



我正在使用带有自定义项目的ListBox来源:

this.ListOfPersonsListBox.ItemsSource = (List<Person>)ListOfPersons.AllPersons;

ListOfPersons是一个静态类,因此它不能实现INotifyPropertyChanged或IObservableCollection。

更新列表后,重新绘制ListBox的最简单方法是什么?我目前的代码有效,但我想找到一个更干净的解决方案:

    private void SyncButton_Click(object sender, EventArgs e)
    {
        ListOfPersons.Sync();
        this.ListOfPersonsListBox.ItemsSource = null;
        this.ListOfPersonsListBox.ItemsSource = ListOfPersons.AllPersons;
    }

考虑使用ObservableCollection而不是List。它在内部实现INotifyPropertyChanged。您可以循环浏览列表,将每个元素添加到一个新的ObservableCollection对象中,并将其绑定到ListBox

如果你要经常转换,你可以创建一个Extension method

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> myList)
{
    var oc = new ObservableCollection<T>();
    foreach (var item in myList)
        oc.Add(item);
    return oc;
}

Shaeak,

Application类在应用程序生命周期期间有效。如果您有需要在应用程序的整个生命周期中从多个页面访问的内容,一种解决方案是创建一个从Application继承的分部类,并在此分部类上创建一个属性。

这篇文章有大约三分之二篇幅的解释。

最新更新