Что некоторые - усовершенствованные темы разработки программного обеспечения, которые должен знать каждый разработчик? [закрытый]

WPF привязывает список / коллекцию элементов к ListBox, но пользовательский интерфейс не обновляется после обновления элементов, Решено .

1114 Я просто тупой. Хотя я много читал об использовании ObservableCollection<> вместо List<>, я просто продолжал игнорировать это предложение и следовал другим предложениям, но безрезультатно. Вернулся к моим книгам и перечитал. Довольно хорошо объяснено, что ObservableCollection<> является обязательным использованием, потому что List<> не предоставляет интерфейс INotifyCollectionChange, необходимый для ListBox обновления его отображения, когда элементы изменяются в коллекции.

Это обновленный код:

private ObservableCollection<StringWrapper> m_AppLog;
ObservableCollection<StringWrapper> Log { get { return m_AppLog; } }

Довольно просто и не требует ничего другого (например, Refresh ()). Поскольку ObservableCollection заботится о том, чтобы инициировать событие изменения, я смог удалить ненужный вызов:

// notify bound objects
OnPropertyChanged("Log");

ObservableCollection не поддерживает обновление потоком, который его не создавал. Поскольку мой список (визуальный журнал, отображающий последние сообщения об ошибках / информационные сообщения) можно обновлять из разных потоков, я добавляю его, чтобы настроить свой код таким образом, чтобы обеспечить обновление с помощью собственного диспетчера списка:

public void AddToLog(string message) {
    if (Thread.CurrentThread != Dispatcher.Thread) {
        // Need for invoke if called from a different thread
        Dispatcher.Invoke(
            DispatcherPriority.Normal, (ThreadStart)delegate() { AddToLog(message); });
    }
    else {
        // add this line at the top of the log
        m_AppLog.Insert(0, new StringWrapper(message));
        // ...

Также отметим, что ObservableCollection<> не поддерживает RemoveRange() вопреки List<>. Это часть возможных корректировок, требуемых при переходе от List к ObservableCollection.

43
задан 6 revs, 4 users 43% 25 July 2013 в 15:30
поделиться

31 ответ

Для людей из Microsoft .NET

я думаю, что Silverlight будет ОГРОМНЫМ в следующие несколько, а возможно, и многие годы.

1
ответ дан 26 November 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: