Я пытаюсь привязать кнопку в пользовательском элементе управления к команде, определенной в главном окне моих приложений. Просто не могу заставить его работать. Метод CanExecute
никогда не вызывается, как и код при нажатии кнопки.
MainWindow.xaml
<Window.CommandBindings>
<CommandBinding x:Name="RefreshCommand"
Command="AppCommands:DataCommands.Refresh"
Executed="Refresh_Executed"
CanExecute="Refresh_CanExecute" />
</Window.CommandBindings>
<uc:Toolbar x:Name="MainToolbar" Grid.Row="0" RefreshCommand="{Binding RefreshCommand}"/>
MainWindow.xaml.cs
private void Refresh_Executed(object sender, ExecutedRoutedEventArgs e)
{
}
private void Refresh_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = false;
}
Дополнительно это делается в конструкторе MainWindow ...
MainToolbar.DataContext = this;
Toolbar.xaml
<Button x:Name="btnRefresh" Command="{Binding RefreshCommand, ElementName=ToolbarControl}">Refresh</Button>
Toolbar.xaml.cs
#region Command Bindings
public static readonly DependencyProperty RefreshCommandProperty =
DependencyProperty.Register("RefreshCommand", typeof(ICommand), typeof(Toolbar), new UIPropertyMetadata(null));
public ICommand RefreshCommand
{
get { return (ICommand)GetValue(RefreshCommandProperty); }
set { SetValue(RefreshCommandProperty, value); }
}
#endregion
Если кто-нибудь может понять, почему это не работает, это будет оценено. Я думаю, что у меня все в порядке. Тем не менее, я установил точки останова на мои обработчики событий для команды кнопки в главном окне, и они просто не вызывают. Единственная путаница в моем файле MainWindow.xaml, использую ли я правильное выражение привязки для привязки свойства пользовательских элементов управления к моей фактической команде?
Примечание. В настоящее время CanExecute имеет значение false, поскольку я хочу сначала отключить кнопку (но это также не работает).
Обновление:
Это явно источник проблемы ...
System.Windows.Data Error: 40 : BindingExpression path error: 'RefreshCommand' property not found on 'object' ''MainWindow' (Name='')'. BindingExpression:Path=RefreshCommand; DataItem='MainWindow' (Name=''); target element is 'Toolbar' (Name='MainToolbar'); target property is 'RefreshCommand' (type 'ICommand')
... но как это исправить?