代码之家  ›  专栏  ›  技术社区  ›  Jiew Meng

绑定到queue<string>。用户界面从不更新

  •  8
  • Jiew Meng  · 技术社区  · 14 年前

    我绑了一个 ListBox 到A Queue<string> . 当我对项目进行排队/出列时, 列表框 不更新。

    我有帮我排队/退队的人提出财产变更

    protected void EnqueueWork(string param)
    {
        Queue.Enqueue(param);
        RaisePropertyChanged("Queue");
    }
    
    protected string DequeueWork()
    {
        string tmp = Queue.Dequeue();
        RaisePropertyChanged("Queue");
        return tmp;
    } 
    
    2 回复  |  直到 13 年前
        1
  •  25
  •   Dean Chalk    14 年前

    你实施了吗 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();
        }
    }
    
        2
  •  1
  •   Community CDub    8 年前

    您应该使用ObservableCollection而不是Queue来执行您想要的操作,为了允许ListBox更新添加和删除项,您的类应该实现InotifyCollectionChanged,ObservableCollection实现该接口,或者您可以编写实现InotifyCollectionChanged接口的自定义队列(ObservableQueue)。

    This post 可以帮助