Вы никогда не должны устанавливать значение по умолчанию для свойства зависимости типа коллекции в значение, отличное от null
.Когда вы назначаете ненулевое значение по умолчанию с помощью (статических) метаданных свойства, все экземпляры вашего элемента управления будут использовать один и тот же объект коллекции.
Вместо этого установите значение по умолчанию в конструкторе элемента управления с помощью SetCurrentValue
:
public DropDownButton()
{
SetCurrentValue(MenuOptionsDependency, new ObservableCollection<TextBlock>());
}
Кроме того, существует строгое соглашение об именах, согласно которому поле идентификатора свойства зависимости должно быть названо как свойство с суффиксом Property
.Таким образом, ваш MenuOptionsDependency
должен на самом деле называться MenuOptionsProperty
.
Также неясно, должен ли тип свойства действительно быть ObservableCollection.Похоже, вы нигде не регистрируете обработчик событий CollectionChanged
, что указывает на то, что ваш элемент управления не должен реагировать на такие изменения.
Рассмотрим объявление свойства следующим образом:
public DropDownButton()
{
SetCurrentValue(MenuOptionsProperty, new List<TextBlock>());
}
public static readonly DependencyProperty MenuOptionsProperty =
DependencyProperty.Register(
nameof(MenuOptions), typeof(IEnumerable<TextBlock>), typeof(DropDownButton));
public IEnumerable<TextBlock> MenuOptions
{
get { return (IEnumerable<TextBlock>)GetValue(MenuOptionsProperty); }
set { SetValue(MenuOptionsProperty, value); }
}