我試圖將用戶控件中的按鈕綁定到在我的應用程序主窗口中定義的命令。只是似乎無法得到它的工作。該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;
}
而且這是在主窗口的做構造函數...
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')
......但如何解決它?
對不起,似乎並沒有解決問題。我的用戶控件叫做「ToolbarControl」(x:name),所以應該沒問題。 – Remotec
@RemotecUk我現在明白你的斷開的綁定鏈接。如何在MainWindow.xaml中更改RefreshCommand =「{Binding RefreshCommand}」到RefreshCommand =「{Binding ElementName =」RefreshCommand「Path =」Command「}」「 – Youngjae
謝謝你做到了。你能解釋一下Path = Command的用途嗎?在這種情況下什麼是「命令」? – Remotec