Привязка к очереди <string>. Пользовательский интерфейс никогда не обновляется - PullRequest
8 голосов
/ 24 ноября 2010

Я связал ListBox с Queue<string>.Когда я ставлю в очередь / удаляю предметы, ListBox не обновляется.

У меня есть помощники для постановки в очередь / удаления, чтобы вызвать изменение свойства

protected void EnqueueWork(string param)
{
    Queue.Enqueue(param);
    RaisePropertyChanged("Queue");
}

protected string DequeueWork()
{
    string tmp = Queue.Dequeue();
    RaisePropertyChanged("Queue");
    return tmp;
} 

Ответы [ 2 ]

25 голосов
/ 24 ноября 2010

Вы реализовали INotifyCollectionChanged? это необходимо для уведомлений о таких действиях, как добавление или удаление элементов из коллекции.

Вот простая реализация для очереди:

public class ObservableQueue<T> : INotifyCollectionChanged, IEnumerable<T>
{
    public event NotifyCollectionChangedEventHandler CollectionChanged;
    private readonly Queue<T> queue = new Queue<T>();

    public void Enqueue(T item)
    {
        queue.Enqueue(item);
        if (CollectionChanged != null)
            CollectionChanged(this, 
                new NotifyCollectionChangedEventArgs(
                    NotifyCollectionChangedAction.Add, item));
    }

    public T Dequeue()
    {
        var item = queue.Dequeue();
        if (CollectionChanged != null)
            CollectionChanged(this, 
                new NotifyCollectionChangedEventArgs(
                    NotifyCollectionChangedAction.Remove, item));
        return item;
    }

    public IEnumerator<T> GetEnumerator()
    {
        return queue.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}
1 голос
/ 24 ноября 2010

Вы должны использовать ObservableCollection, а не очередь, чтобы делать то, что вы хотите, чтобы позволить ListBox обновлять элементы, добавляя и удаляя ваш класс, должен реализовывать INotifyCollectionChanged, ObservableCollection реализует этот интерфейс, или вы можете написать свою собственную очередь (ObservableQueue), которая реализует интерфейс INotifyCollectionChanged

Этот пост может помочь

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