Как предложил JaredPar, вы можете скрыть свойство Items с помощью свойства new IList<MyExtendedTreeViewItem> Items
.Это не заменяет свойство Items
базового класса, поэтому вы должны синхронизировать их.Вы можете сделать это, реализовав (частный или внутренний) класс, чтобы обернуть коллекцию элементов базового класса:
class ItemsWrapper : IList<MyExtendedTreeViewItem>
{
private IList<TreeViewItem> _baseItems;
public ItemsWrapper(IList<TreeViewItem> baseItems)
{
_baseItems = baseItems;
}
public void Add(MyExtendedTreeViewItem item)
{
_baseItems.Add(item);
}
// much of implementation omitted here for brevity
public MyExtendedTreeViewItem this[int index]
{
get { return (MyExtendedTreeViewItem)_baseItems[index]; }
set { _baseItems[index] = value; }
}
}
И:
class MyExtendedTreeViewItem : TreeViewItem
{
private ItemsWrapper _items;
public MyExtendedTreeViewItem()
{
_items = new ItemsWrapper(base.Items);
}
public new IList<MyExtendedTreeViewItem> Items { get { return _items; } }
}
Это не совсем безопасно, потому что кто-томожет получить ссылку на базовое свойство Items, а затем добавить к нему TreeViewItem
, и приведение к MyExtendedTreeViewItem
вызовет исключение.