【问题标题】:c# wrap model object containing list for MVVM bindingc# 包装模型对象,其中包含用于 MVVM 绑定的列表
【发布时间】:2018-09-03 17:43:02
【问题描述】:

假设我有一个模型对象

class ModelClass
{
    public List<Element> eList;

    public void MethodA()
    {
        doSomething();
    }
}

我也想在 MVVM 中使用这个对象。然后 Viewmodel 会调用像 MethodA 这样的方法来操作数据,eList 中的元素会被更新。有没有办法做到这一点而不使eList 成为ObservableCollection?我想这样做是为了在其他地方也使用这个ModelClass,而不会造成太多的代码污染。

【问题讨论】:

  • ObservableCollection 就像在添加、删除和更改集合时通知视图的列表。如果要将 eList 绑定到 View。最好使用 Observable 否则添加后需要通知视图

标签: c# mvvm data-binding


【解决方案1】:

如果我们比较 ListObservableCollection,那么两者都是从 IList 实现的。那里没有太大区别。最大的不同是 ObservableCollection 还实现了 INotifyCollectionChanged 接口,允许 WPF 绑定到它。

因此,如果您不想在模型类中使用 List 而不是 ObservableCollection,那么您需要使用 INotifyCollectionChanged 来实现该类:

class ModelClass:INotifyCollectionChanged
{
    public List<Element> eList;// call OnCollectionChanged() when you set/add/remove...the list).

    public void MethodA()
    {
        doSomething();
    }

    #region INotifyCollectionChanged Members

    protected void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
    {
        if (CollectionChanged != null)
            CollectionChanged(this, e);
    }

    public event NotifyCollectionChangedEventHandler CollectionChanged;

    #endregion

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    相关资源
    最近更新 更多