2012-10-25 53 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

如果我在「開始」方法中啓用網格(例如,在其他事件處理程序中),這沒有幫助, –