2010-08-18 62 views
1

这个菜单项,因为它连接到命令执行幕后魔术对我来说:如何绑定非命令MenuItem IsEnabled以保持与基于命令的MenuItem一致?

<MenuItem Name="mnuOpen" Command="Open"/> 

在那里我有

<Window.CommandBindings> 
    <CommandBinding Command="Open" 
        Executed="CommandBinding_Open_Executed" 
        CanExecute="CommandBinding_ProjectSelected"/> 
    </Window.CommandBindings> 

但每次结合我试过未能做任何事情。

<MenuItem Name="mnuExplorer" Click="mnuExplorer_Click" Header="Open Containing Folder" IsEnabled="{Binding ElementName=mnuOpen, Path=IsEnabled}" /> 
+0

林不知道,如果我明白你的意思但它工作正常 – 2010-08-18 19:51:55

+0

不在我的机器上。 – Maslow 2010-08-19 13:50:47

回答

1

它工作得很好,也许你忘了设置CanExecute标志或者有其他依赖

全码

<Window x:Class="MenuBinding.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.CommandBindings> 
    <CommandBinding Command="Open" 
       Executed="CommandBinding_Executed" 
       CanExecute="CommandBinding_CanExecute"/> 
</Window.CommandBindings> 
<Grid> 
    <Menu> 
     <MenuItem Name="mnuOpen" Command="Open" IsEnabled="False" /> 
     <MenuItem Name="mnuExplorer" Header="Open Containing Folder" IsEnabled="{Binding ElementName=mnuOpen, Path=IsEnabled}" /> 
    </Menu> 
</Grid> 

和类

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) 
    { 
     MessageBox.Show("Magic"); 
    } 

    private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e) 
    { 
     e.CanExecute = true; //define if command can be executed 
    } 
} 
+0

将属性'IsEnabled =“False”添加到'mnuOpen'之后,现在它不能启用。将它取出并返回到'mnuExplorer',在mnuOpen的条件满足之前,它最初不会被禁用以启用它。 – Maslow 2010-08-19 13:54:26