2010-08-02 69 views
0

嗯即時嘗試創建一個自定義容器類,在我的情況下包含ViewMappingEntry的,所以我創建了繼承Freezable和實現ICollection ..但在Blend中創建實例和瀏覽它時,我得到這個錯誤:無法將內容添加到類型爲'ViewModelMapping'的對象..WPF自定義容器類

注意:它編譯得很好,我在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; 
    } 
} 

回答

0

試圖左右後,我找到了一個解決方案,如果我實現了所有這些接口 - >的ICollection,IList的,IList的,ICollection的,IEnumerable的它開始在混合工作。