Использование ItemsSource для заполнения WPF ListBox - хорошая идея?

Я (относительно) опытный кодировщик Cocoa / Objective-C и обучаюсь C # и платформе WPF.

В Какао, при заполнении NSTableView , относительно просто назначить делегат и источник данных для представления. Эти методы делегата / источника данных затем используются для заполнения таблицы и определения ее поведения.

Я собираю простое приложение со списком объектов, которое позволяет называть их Dog объектами, каждый из которых имеет публичное строковое имя . Это возвращаемое значение Dog.ToString () .

Объекты будут отображаться в ListBox , и я хотел бы заполнить это представление, используя шаблон, аналогичный шаблону NSTableViewDataSource Какао. В настоящее время, похоже, он работает с использованием:

public partial class MainWindow : Window, IEnumerable<Dog>
    {
        public Pound pound = new Pound();

        public MainWindow()
        {
            InitializeComponent();

            Dog fido = new Dog();
            fido.name = "Fido";
            pound.AddDog(fido);

            listBox1.ItemsSource = this;

            Dog spot = new Dog();
            spot.name = "Spot";
            pound.AddDog(spot);
        }

        public IEnumerator<Dog> GetEnumerator()
        {
            return currentContext.subjects.GetEnumerator();
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

Но мне интересно, насколько правильный это. Я буквально установил Visual Studio менее чем за час, поэтому можно с уверенностью сказать, что я понятия не имею, что делаю.

  1. Правильный ли это шаблон?
  2. Добавление второго элемента в список ( место ), похоже, правильно обновляет ListBox , но мне интересно, что запускает обновления ?
  3. Что произойдет, если я обновлю Pound в фоновом потоке?
  4. Как я могу вручную попросить ListBox обновить себя? (Мне вообще нужно?)

Одно изменение , которое, как я знаю, мне нужно сделать, это рефакторинг реализации IEnumerable в отдельный класс, например DogListItemsSource , но я хочу убедиться, что у меня твердый подход, прежде чем полировать его.

Не стесняйтесь указывать в комментариях на любые другие моменты, которые я должен учитывать или иметь в виду, большие или маленькие. Я бы хотел научиться этому правильно, с первого раза.

5
задан Craig Otis 29 November 2011 в 22:23
поделиться