Хотя ответ HB будет работать, более ненавязчивый способ сделать это - через новое присоединенное свойство .
Давайте назовем его MoreCommand.
Вы связываете кнопкук MoreCommand в шаблоне элемента управления и привяжите MoreCommand к команде на ViewModel в точке, где вы объявляете экземпляры ComboBox.
Details.
1.) Вы создаете статический класс, который предоставляет прикрепленныйсвойство
public static class AttachedCommand
{
public static readonly DependencyProperty CommandProperty = DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(AttachedCommand));
public static bool GetCommand(DependencyObject dependencyObject)
{
return (bool)dependencyObject.GetValue(CommandProperty);
}
public static void SetCommand(DependencyObject dependencyObject, bool value)
{
dependencyObject.SetValue(CommandProperty, value);
}
}
2.) Вы добавили поддержку в свой шаблон элемента управления для этого присоединенного свойства
<Popup x:Name="PART_Popup"
IsOpen="{TemplateBinding IsDropDownOpen}">
<Border x:Name="PopupBorder"
HorizontalAlignment="Stretch" Height="Auto"
MinWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="Black" Background="White" CornerRadius="3">
<ScrollViewer x:Name="ScrollViewer" BorderThickness="0" Padding="1">
<StackPanel>
<ItemsPresenter/>
<Button Command={TemplateBinding local:AttachedCommand.Command}>Other</Button>
</StackPanel>
</ScrollViewer>
</Border>
</Popup>
Убедитесь, что вы определили «локальное» пространство имен.
3.) По вашему мнению, вы привязываете присоединенное свойство к представлению модели
<ComboBox ItemsSource={Binding Items} local:AttachedCommand.Command={Binding FetchMoreItems} />
Преимущество заключается в том, что вам не нужно создавать подкласс Combobox, и вы можете потенциально комбинировать несколько «настроек» одного и того жеконтроль в будущем, без риска взрыва класса.