INotifyCollectionChanged UI not updated

本文关键字:updated not UI INotifyCollectionChanged | 更新日期: 2023-09-27 17:54:32

我在更新UI时有问题。我有一个用来绑定UI元素的类:

public class engine : INotifyCollectionChanged
    {
        RWProject project = new RWProject();
        public ObservableCollection<string> ProjectListBinding
        {
            get {  return project.list(); }
        }
        public event NotifyCollectionChangedEventHandler CollectionChanged;
        private void OnCollectionChanged(NotifyCollectionChangedEventArgs eventArgs)
        {
            if (this.CollectionChanged != null)
            {
                this.CollectionChanged(this, eventArgs);
            }
        }
        private ICommand _usunProjekt;
        public ICommand UsunProjekt
        {
            get
            {
                _usunProjekt = new UsunProjektCommand();
                return _usunProjekt;
            }           
        }
        private ICommand _dodajProjekt;
        public ICommand DodajProjekt
        {
            get
            {
                _dodajProjekt = new DodajNowyProjektCommand();
                return _dodajProjekt;
            } 
        }
    }

ProjectListBinding是文件夹内的文件名列表,这些文件名显示在listview控件上。

命令DodajProjekt创建在同一文件夹,新文件(usprojekt -删除)命令被绑定到按钮。

I need to rise event

 OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset))

命令执行后更新UI,但我不知道在哪里附加这部分代码。或者我应该换一种方法?对于我已经拥有的代码,绑定和命令工作得很好,只是更新根本不起作用。你能帮我解决这个问题吗?
彼得亚雷

INotifyCollectionChanged UI not updated

您不应该实现INotifyCollectionChanged。从您的视图来看,您需要绑定到ProjectListBinding,这将自动为您引发INotifyCollectionChanged并更新UI。当然,假设您拥有的类(即engine)是您的视图模型。

在运行命令时,您应该更新ProjectListBinding以使INotifyCollectionChanged事件上升。也就是说,命令DodajNowyProjektCommandUsunProjekt都应该在ProjectListBinding上运行。