2012-10-25 54 views
2

我有HyperlinkGrid。我将命令绑定到启用/禁用它的超链接。然后我使用该命令禁用它。然后在其父母(Grid)我设置IsEnabled=False属性。之后,我启用我的超链接与我的命令并启用网格,但超链接不会激活!超链接无法与关联的命令正常工作

下面是示例:

Command testCommand = new Command(); 

public MainWindow() { 
    InitializeComponent(); 
    hl.Command = testCommand; 
} 

private void Start(object sender, RoutedEventArgs e) { 

    //Disable Hyperlink 
    testCommand.Enabled = false; 
    //Disable Grid 
    grid.IsEnabled = false; 
    //Enable Hyperlink 
    testCommand.Enabled = true; 
    //Enable Grid 
    grid.IsEnabled = true; 
    //hl.IsEnabled = true; //if uncomment this all will be work 
} 

XAML:

<Window x:Class="WpfApplication25.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 
     Height="172" 
     Width="165"> 
    <StackPanel> 
    <Grid x:Name="grid"> 
     <TextBlock> 
     <Hyperlink x:Name="hl">Test</Hyperlink> 
     </TextBlock> 
    </Grid> 
    <Button Content="Start" 
      Name="button1" 
      Click="Start" /> 
    </StackPanel> 
</Window> 

,并注册一个ICommand:

public class Command : ICommand { 
    private bool enabled; 
    public bool Enabled { 
    get { 
     return enabled; 
    } 
    set { 
     enabled = value; 
     if (CanExecuteChanged != null) 
     CanExecuteChanged(this, EventArgs.Empty); 
    } 
    } 
    public bool CanExecute(object parameter) { 
    return Enabled; 
    } 
    public event EventHandler CanExecuteChanged; 
    public void Execute(object parameter) { } 
} 

更新:

如果超链接被替换为Button,即使其父项被禁用(grid.IsEnabled = false),它也将被启用。

+0

我看不出有任何命令绑定设置,以实际结合您的testCommand的Execute和CanExecute执行命令本身。你是否只包含这部分代码?如果您没有设置命令绑定,则不管任何IsEnabled设置,控件都不会启动。 –

+0

通过覆盖“Start”按钮中命令的绑定,您的XAML将永远不会收到@DanaCartwright指出的命令通知。 – user7116

+0

我简化了我的例子。这不是由于'DataBinding'。 –

回答

1

哇,我得到了它 这里就是你缺少

public class Command : ICommand 
    { 
     private bool enabled; 
     public bool Enabled 
     { 
      get 
      { 
       return enabled; 
      } 
      set 
      { 
       enabled = value; 
       //if (CanExecuteChanged != null) 
       // CanExecuteChanged(this, EventArgs.Empty); 
      } 
     } 

     public bool CanExecute(object parameter) 
     { 
      return Enabled; 
     } 
     public event EventHandler CanExecuteChanged 
     { 
      add { CommandManager.RequerySuggested += value; } 
      remove { CommandManager.RequerySuggested -= value; } 
     } 

     public void Execute(object parameter) { } 
    } 

的CanExecuteChanged代表的命令订阅到CommandManager

+0

如果我在“开始”方法中启用网格(例如,在其他事件处理程序中),这没有帮助, –