В вашем пользовательском контроле вы устанавливаете CommandBinding
следующим образом:
CommandTarget="{Binding ElementName=userControl11}"
Если вы посмотрите в окне «Вывод» во время работы вашей программы, вы увидите следующее:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=userControl11'. BindingExpression:(no path); DataItem=null; target element is 'Button' (Name=''); target property is 'CommandTarget' (type 'IInputElement')
Это потому, что в текущей области имен нет элемента с именем userControl11
. См. this для получения полной информации о том, как работают области имен XAML, но вкратце, имена XAML видны только на странице, в окне или пользовательском элементе управления, в котором они объявлены. Вы не можете ссылаться на объявленное имя в вашем окне изнутри пользовательского элемента управления.
Если вы хотите установить целевую команду для пользовательского элемента управления с помощью привязки, ее необходимо указать как свойство зависимости. Вы бы добавили следующее объявление в элемент управления:
public IInputElement CommandTarget
{
get { return (IInputElement)GetValue(CommandTargetProperty); }
set { SetValue(CommandTargetProperty, value); }
}
public static readonly DependencyProperty CommandTargetProperty =
DependencyProperty.Register("CommandTarget", typeof(IInputElement), typeof(UserControl1), new UIPropertyMetadata(null));
и в пользовательском элементе управления XAML свяжите это свойство:
<Button Content="Click"
Command="local:Commands.ClickCommand"
CommandTarget="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=CommandTarget}" />
Я не могу заставить это работать в вашем проекте, но это потому, что я не могу понять ваш проект. Похоже, у вас есть два или три пользовательских элемента управления с именем UserControl1
в разных пространствах имен, а имена файлов в проекте не соответствуют их содержимому, и полезных комментариев не так уж много. (В общем, вместо того, чтобы говорить «это не работает», опишите поведение, которое вы ожидаете; это гораздо понятнее тому, кто пытается помочь вам, какова ваша настоящая проблема.)
Надеюсь, это в любом случае полезно.