Самый простой способ обновить ListBox с помощью CustomSource? - PullRequest
7 голосов
/ 07 июня 2011

Я использую ListBox с пользовательским ItemsSource:

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 ]

8 голосов
/ 07 июня 2011

Попробуйте использовать 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 голос
/ 08 июня 2011

Shaeak,

Класс Application действует в течение всего жизненного цикла приложения. Если у вас есть что-то, что должно быть доступно с нескольких страниц на протяжении всей жизни приложения, одним из решений является создание частичного класса, который наследуется от Application, и создание свойства для этого частичного класса.

Эта статья содержит объяснение примерно двух третей пути вниз по странице.

...