绑定到队列<字符串>.UI 从不更新

Binding to Queuelt;stringgt;. UI never updates(绑定到队列lt;字符串gt;.UI 从不更新)

本文介绍了绑定到队列<字符串>.UI 从不更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将 ListBox 绑定到 Queue.当我将项目入队/出队时,ListBox 不会更新.

I bound a ListBox to a Queue<string>. When I enqueue/dequeue items, the ListBox does not update.

我有帮助入队/出队来提高属性更改

I have helpers for enqueue/dequeue to raise property change

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

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

推荐答案

你实现了 INotifyCollectionChanged 了吗?您需要它来通知诸如从集合中添加或删除项目之类的操作.

Have you implemented INotifyCollectionChanged ? you need this for notifications of actions like adding or removing items from a collection.

这是队列的简单实现:

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();
    }
}

这篇关于绑定到队列&lt;字符串&gt;.UI 从不更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:绑定到队列&lt;字符串&gt;.UI 从不更新

基础教程推荐