WPF ListBox не отображает элементы (один за другим) - PullRequest
0 голосов
/ 25 ноября 2018

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

При отладке я заметил, что список (wordBox) обновился, когда я добавил значение в oWords, но значение не отображалось.

Exercise4_btn.Click += async (object sender, RoutedEventArgs e) =>
        {
            oWords = new ObservableCollection<Word>();
            List<string> words = await GetWordsFromFile();

            wordBox.DataContext = oWords;
            wordBox.SetBinding(ListBox.ItemsSourceProperty, new Binding()); 

            foreach (var word in words)
            {
                await Task.Run(() =>
                {
                    int count = words.Where(w => w.Equals(word)).Count();

                    try
                    {
                        oWords.Add(new Word {Value = word, Count = count});
                    }
                    catch { }
                });
            }
        };

Вот так выглядит список в xaml

<ListBox Name="wordBox" HorizontalAlignment="Left" Height="612" Margin="460,53,0,0" VerticalAlignment="Top" Width="278"/>

И этот класс используется ObservableCollection

public class Word
{
    public string Value { get; set; }
    public int Count { get; set; }

    public override string ToString()
    {
        return ($"{Value}\t{Count}");
    }
}

1 Ответ

0 голосов
/ 27 ноября 2018

Ссылка в комментарии, предоставленном Coops, сработала для меня Обновление пользовательского интерфейса с диспетчером WPF и TPL

Я также нашел другое подобное решение Асинхронное добавление в ObservableCollection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...