2013-01-09 77 views
0

我正在使用SIlverLight RelayCommand來啓用和禁用按鈕。 基於一些條件,我想禁用按鈕, 請建議我如何可以禁用按鈕MVVM按鈕禁用

下面工作正常進行初始加載,

public RelayCommand BackClickCommand 
    { 
     get 
     { 
      if (_backClickCommand == null) 
      { 
       _backClickCommand = new RelayCommand(() => 
       { 
        step--; 
        if(step<1) 
        // code need to diable this button 
       },() => this.CanExecute()); 
      } 

      return _backClickCommand; 

     } 
    } 
    int step=2; 

    public bool CanExecute() 
    { 
     if(step>0) 
     return enabled; 
     else false; 
    } 

在我的代碼有些地方我做

enabled = false; 

請建議如何禁用我的按鈕

謝謝,

+0

嗨user1814841,如果你已經找到了答案是修復您的問題,請將其標記爲此類。如果沒有,並且你自己修復了它,你可以回答你自己的問題。請參閱常見問題解答瞭解更多信息:http://stackoverflow.com/faq – Peter

回答

2

假設你綁定XAML中這樣的:

<Button Command="{Binding BackClickCommand}" /> 

所有你需要做的就是提醒用戶界面檢查再結合:

enabled = false; 
PropertyChanged(this, new PropertyChangedEventArgs("BackClickCommand")); 

這將使UI檢查BackClickCommand再次看到它已更改,從而禁用該按鈕。

有關完整的代碼示例,請參閱MSDN

編輯:這將是一個可能的一段代碼:

int step = 2; 

public RelayCommand BackClickCommand 
{ 
    get 
    { 
     if (_backClickCommand == null) 
     { 
      _backClickCommand = new RelayCommand(() => 
      { 
       step--; 
       PropertyChanged(this, new PropertyChangedEventArgs("BackClickCommand")); 
      },() => this.CanExecute()); 
     } 

     return _backClickCommand; 

    } 
} 

public bool CanExecute() 
{ 
    return this.step > 0; 
} 
+0

對於混淆抱歉只是添加更多,代碼我想要禁用基於整數步驟值的按鈕。請suhggest – user1814841

0

當步長值的變化,你必須通知命令已更改,因此CanExecute再次評估。

正如你所說,啓用將在代碼中的某處進行評估。

您的代碼可以更大同小異:

int step=2; 

public RelayCommand BackClickCommand 
{ 
    get 
    { 
     if (_backClickCommand == null) 
     { 
      _backClickCommand = new RelayCommand(() => 
      { 
       step--; // Your logic 
       OnPropertyChanged("BackClickCommand"); // Notify the change! 
      },() => this.CanExecute()); 
     } 

     return _backClickCommand; 
    } 
} 

public bool CanExecute() 
{ 
    return enabled; 
} 
+0

我正在使用Galasoft RaisePropertyChanged它沒有發射。 RaisePropertyChanged有問題嗎? – user1814841

+0

正常工作.RaiseCanExecuteChanged(); – user1814841

+0

對不起,我從未與Galasoft合作過。 – JoanComasFdz