Есть ли какая-либо другая причина, по которой вы подклассифицируете ComboBox помимо того, что вы здесь делаете?
Потому что, если идея состоит в том, чтобы просто предоставить список строк в комбинированный список, взгляните на "Добавить коллекцию или массив в словарь ресурсов wpf"
Насколько это возможно, лучше, чтобы комбобокс позаботился о себе сам - используя свойство ItemsSource. Поэтому в связанном примере мы предоставляем «ресурс», содержащий ваш список строк, а затем передаем этот ресурс в ItemsSource следующим образом:
<ComboBox ItemsSource="{StaticResource stringList}" />
Определите тип как этот:
public class StringList : List<string> { }
А затем создать статический ресурс
<Window.Resources>
<local:StringList x:Key="stringList">
<sys:String>Monday</sys:String>
<sys:String>Wednesday</sys:String>
<sys:String>Friday</sys:String>
</local:StringList >
</Window.Resources>
Надеюсь, это поможет.
Редактировать: вы также можете изменить свой DependencyProperty, чтобы использовать StringList вместо String [], тогда ваше свойство зависимости будет работать также.
<local:MyComboBox MyProperty="{StaticResource stringList}" Height="23" />
А затем свойство зависимости:
public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register("MyProperty",typeof(StringList),typeof(MyComboBox),new FrameworkPropertyMetadata(null, listChangedCallBack));
static void listChangedCallBack(DependencyObject property, DependencyPropertyChangedEventArgs args)
{
ComboBox combo = (ComboBox)property;
combo.ItemsSource= (IEnumerable)args.NewValue;
}
Тогда это фактически сделало бы то же самое, что и привязка напрямую к ItemsSource. Но главное, если я вас правильно понимаю, это просто заставить свойство Dependency работать.