2010-04-28 90 views
2

RelayCommands覆蓋我的按鈕的「IsEnabled」。RelayCommands覆蓋我的按鈕的「IsEnabled」

這是一個錯誤?下面是我的查看和XAML代碼從我的ViewModel

<Button Grid.Column="0" Content="Clear" IsEnabled="False" cmd:ButtonBaseExtensions.Command="{Binding ClearCommand}" />  

public RelayCommand ClearCommand 
    { 
     get { return new RelayCommand(() => MessageBox.Show("Clear Command")); } 
    } 

通知我硬編碼了的IsEnabled =「假」在我的XAML。該值完全被忽略(按鈕始終啓用)。

我意識到RelayCommand有一個CanExecute超載,但我確實想要使用它,因爲我想要做的不僅僅是禁用按鈕。

+0

如果你創建一個單向的結合,會發生什麼IsEnabled屬性?可能是您的問題的解決方案,但不是問題的答案;) – CodeWeasel 2010-04-30 06:25:14

+0

好主意,但它沒有奏效! – vidalsasoon 2010-04-30 11:53:57

+0

這讓我絕對瘋狂。爲了理智,+1。最後29小時編碼的24。 – 2012-02-26 10:39:45

回答

3

這是一個有趣的觀點。你是對的,IsEnabled屬性被覆蓋。我想如果在構造函數中沒有設置CanExecute委託,可以忽略IsEnabled屬性,我會在下一個版本中考慮它。

同時,使用CanExecute委託並將其設置爲始終返回false。

public RelayCommand ClearCommand 
{ 
    get { return new RelayCommand(
     () => MessageBox.Show("Clear Command"), 
     () => false); } 
} 

乾杯, 洛朗

+0

謝謝!我認爲這種改變是有道理的。你的工具箱是偉大的順便說一句。 – vidalsasoon 2010-04-30 13:11:27

1

這是我實現......

1)RelayCommand類的聲明可能是因爲:

公共類RelayCommand:ViewModelBase,ICommand的

2)IsEnabled屬性的實現如下:

public bool IsEnabled 
    { 
     get { return _isEnabled; } 
     set 
     { 
      if (value != _isEnabled) 
      { 
       _isEnabled = value; 

       OnPropertyChanged("IsEnabled"); 
      } 
     } 
    } 

3)最後,你需要IsEnabled屬性綁定在XAML如下:

的IsEnabled =「{綁定路徑= SearchCommand.IsEnabled}」