c# - 通知ViewModel模型集合已更改

标签 c# .net wpf xaml mvvm

我有一个模型集合,该模型集合在我的大部分代码中都被引用。

public class TraceEntryQueue
    {
        private readonly Queue<TraceEntry> _logEntries; 

        public TraceEntryQueue()
        {
            _logEntries = new Queue<TraceEntry>();
        }

        public void AddEntry(TraceEntry newEntry)
        {
            _logEntries.Enqueue(newEntry);

        }

        public List<TraceEntry> GetAsList()
        {
            return _logEntries.ToList();
        }
    }

此收藏集是我的观点之一。
public class LoggingViewModel : ViewModelBase
    {
        private ICollectionView _customers;
        public ICollectionView Customers
        {
            get
            {
                return _customers;
            }
            private set
            {
                _customers = value;

            }
        }

        public LoggingViewModel(TraceEntryQueue traceQueue)
        {

            Customers = CollectionViewSource.GetDefaultView(traceQueue.GetAsList());
            Customers.SortDescriptions.Add(new SortDescription("Index", ListSortDirection.Descending));
            Customers.Refresh();
        }
    }

问题是当我通过添加新条目时,如何通知我的 View 重新加载集合
            public void AddEntry(TraceEntry newEntry)
            {
                _logEntries.Enqueue(newEntry);

            }

最佳答案

使用可观察的集合而不是队列。当集合更新(添加/删除等)时,这将自动通知您的 View

public class TraceEntryQueue
{
    private readonly ObservableCollection<TraceEntry> _logEntries; 

    public TraceEntryQueue()
    {
        _logEntries = new ObservableCollection<TraceEntry>();
    }

    public void AddEntry(TraceEntry newEntry)
    {
        _logEntries.Add(newEntry);
    }

    public ObservableCollection<TraceEntry> GetLogEntries()
    {
        return _logEntries;
    }
}

关于c# - 通知ViewModel模型集合已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14520788/

相关文章:

c# - 如何在WPF中检测父对象的子对象的变化?

c# - 使用自定义在数据库中存储不同的用户权限

c# - Assembly.GetAssembly(类型)与类型.Assembly

.net - 如何在 PCF 中使用 Windows 身份验证?

c# - 如何模仿Picasa渲染降质图片加速绘图

c# - 如何在 C# 中将代码块(不是完整方法)作为参数传递?

c# - wpf Canvas 不会调整大小

c# - Azure AD 联合注销未重定向到客户端应用程序

c# - 猜谜和数字比较

wpf - 为什么我的 WPF DataGrids 之一会给出 "' EditItem' is not allowed for this view"异常?