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

时间:2011-06-07 15:26:39

标签: c# silverlight xaml windows-phone-7

我正在使用带有自定义ItemsSource的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;
    }

2 个答案:

答案 0 :(得分:8)

考虑使用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;
}

答案 1 :(得分:1)

Shaeak,

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

This article有一个关于页面下三分之二的解释。