Mvvm WPF自定义容器类

Mvvm WPF自定义容器类,mvvm,Mvvm,我正试图创建一个自定义容器类,在我的例子中包含ViewMappingEntry,所以我创建了一个继承Freezable并实现ICollection的类。。但是当在Blend中创建一个实例并浏览它时,我得到了一个错误:无法向“ViewModelMapping”类型的对象添加内容 注意:它编译得很好,并且我在VisualStudio中没有收到任何错误,那么我缺少了什么呢 public class ViewModelMapping : Freezable, ICollection<Mapping

我正试图创建一个自定义容器类,在我的例子中包含ViewMappingEntry,所以我创建了一个继承Freezable并实现ICollection的类。。但是当在Blend中创建一个实例并浏览它时,我得到了一个错误:无法向“ViewModelMapping”类型的对象添加内容

注意:它编译得很好,并且我在VisualStudio中没有收到任何错误,那么我缺少了什么呢

public class ViewModelMapping : Freezable, ICollection<MappingEntry>
{
    object locker = new object();

    List<MappingEntry> internalList = new List<MappingEntry>();

    #region ICollection<MappingEntry> Members

    public void Add(MappingEntry item)
    {
        if (this.IsFrozen || this.IsSealed)
            throw new InvalidOperationException("ViewModelMapping is frozen");
        lock (locker)
            internalList.Add(item);
    }

    public void Clear()
    {
        if (this.IsFrozen || this.IsSealed)
            throw new InvalidOperationException("ViewModelMapping is frozen");
        lock (locker)
            internalList.Clear();
    }

    public bool Contains(MappingEntry item)
    {
        lock (locker)
            return internalList.Contains(item);
    }

    public void CopyTo(MappingEntry[] array, int arrayIndex)
    {
        lock (locker)
            internalList.CopyTo(array, arrayIndex);
    }

    public int Count
    {
        get 
        {
            lock (locker)
                return internalList.Count;
        }
    }

    public bool IsReadOnly
    {
        get { return base.IsFrozen || base.IsSealed; }
    }

    public bool Remove(MappingEntry item)
    {
        if (this.IsFrozen || this.IsSealed)
            throw new InvalidOperationException("ViewModelMapping is frozen");
        lock (locker)
            return internalList.Remove(item);
    }

    #endregion

    #region IEnumerable<MappingEntry> Members

    public IEnumerator<MappingEntry> GetEnumerator()
    {
        lock (locker)
            return (IEnumerator<MappingEntry>)internalList.ToArray().GetEnumerator();
    }

    #endregion

    #region IEnumerable Members

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        lock (locker)
            return internalList.ToArray().GetEnumerator();
    }

    #endregion

    protected override Freezable CreateInstanceCore()
    {
        ViewModelMapping viewModelMapping = new ViewModelMapping();
        lock(locker)
            viewModelMapping.internalList = new List<MappingEntry>(this.internalList.ToArray());

        return viewModelMapping;
    }
}
public类ViewModelMapping:Freezable,ICollection
{
对象锁定器=新对象();
List internalList=新列表();
#区域i集合成员
公共作废添加(映射条目项)
{
如果(this.is冻结| | this.IsSealed)
抛出新的InvalidOperationException(“ViewModelMapping已冻结”);
锁(储物柜)
内部列表。添加(项目);
}
公共空间清除()
{
如果(this.is冻结| | this.IsSealed)
抛出新的InvalidOperationException(“ViewModelMapping已冻结”);
锁(储物柜)
internalList.Clear();
}
公共布尔包含(映射条目项)
{
锁(储物柜)
返回内部列表。包含(项);
}
public void CopyTo(MappingEntry[]数组,int arrayIndex)
{
锁(储物柜)
CopyTo(数组,arrayIndex);
}
公共整数计数
{
得到
{
锁(储物柜)
返回internalList.Count;
}
}
公共图书馆是只读的
{
获取{return base.isfronged | | base.IsSealed;}
}
公共布尔删除(映射条目项)
{
如果(this.is冻结| | this.IsSealed)
抛出新的InvalidOperationException(“ViewModelMapping已冻结”);
锁(储物柜)
返回内部列表。删除(项目);
}
#端区
#区域可数成员
公共IEnumerator GetEnumerator()
{
锁(储物柜)
返回(IEnumerator)internalList.ToArray().GetEnumerator();
}
#端区
#区域可数成员
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
锁(储物柜)
返回internalList.ToArray().GetEnumerator();
}
#端区
受保护的重写Freezable CreateInstanceCore()
{
ViewModelMapping ViewModelMapping=新建ViewModelMapping();
锁(储物柜)
viewModelMapping.internalList=新列表(this.internalList.ToArray());
返回viewModelMapping;
}
}

尝试之后,我找到了一个解决方案,如果我实现了所有这些接口->ICollection、IList、IList、ICollection、IEnumerable,它就开始在blend中工作