Пользовательский контейнерный класс WPF - PullRequest
0 голосов
/ 02 августа 2010

Ну, я пытаюсь создать собственный контейнерный класс, который содержит в моем случае ViewMappingEntry, поэтому я создал класс, который наследует Freezable и реализует ICollection .. но при создании экземпляра в Blend и его просмотре я получаю эту ошибку: Невозможно добавить содержимое к объекту типа 'ViewModelMapping' ..

Примечание: он прекрасно компилируется, и я не получаю ошибок в Visual studio, так чего мне не хватает?

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;
    }
}

1 Ответ

0 голосов
/ 03 августа 2010

после попытки найти решение, если я реализовал все эти интерфейсы -> ICollection, IList, IList, ICollection, IEnumerable, он начал работать в blend.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...