2010-10-03 50 views
3

我的代碼是在這裏>>CommandBinding問題。如何啓用命令按鈕

public class Player:INotifyPropertyChanging 
{ 
     string addressBar; 
     public string Url 
     { 
      get { 

       return addressBar; 
      } 
      set { addressBar = value; OnPropertyChanged("Url"); } 
     } 
     public Regex regVillage = new Regex(@"\?doc=\d+&sys=[a-zA-Z0-9]{2}"); 

     RelayCommand _AddAttackTask; 
     public ICommand AddAttackTask 
     { 
      get { 
       if (_AddAttackTask == null) 
       { 
        _AddAttackTask = new RelayCommand(param => 
        { 

        }, param => this.CanAttack); 
       } 
       return _AddAttackTask; 
      } 
     } 

     public Boolean CanAttack 
     { 
      get{ 
       if (Url == null) return false; 
       return regVillage.IsMatch(Url); 
      }    
     } 
} 

在XAML,我有文本框和按鈕。文本框由url綁定,按鈕綁定爲AddAttackTask。當我改變文本框的值,Url改變了。主要目標是當改變URL時,按鈕啓用或禁用。但按鈕始終禁用。

我從WPF Apps With The Model-View-ViewModel Design Pattern

越來越RelayCommand類有什麼錯我的代碼?

請修復我的命令綁定!

+0

變化'CanAttack'簡單'回報(URL!= NULL)'後先調用CommandManager.InvalidateRequerySuggested();功能。這樣你確定它不是你的正則表達式。或者使用調試器來檢查相同的事情。 – 2010-10-03 10:56:20

+0

正則表達式正確。問題是URL更改後,CanExecute不會引發。 – ebattulga 2010-10-03 11:10:08

+0

你有沒有在Url單獨的用戶控制按鈕? – NVM 2010-10-03 17:13:10

回答

1

我自己找到了。

必須在更改屬性

public string Url 
     { 
      get { 

       return addressBar; 
      } 
      set { addressBar = value; OnPropertyChanged("Url"); 
        CommandManager.InvalidateRequerySuggested(); 
      } 
     }