3

私のコードはこちら>>

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を変更すると、ボタンが有効または無効になります。ただし、ボタンは常に無効になっています。

Model-View-ViewModel デザイン パターンを使用して WPF アプリから RelayCommand クラスを取得しています

私のコードで何が間違っていますか?

コマンドバインディングを修正してください!

4

1 に答える 1

1

自分で見つけました。

CommandManager.InvalidateRequerySuggested();プロパティを変更した後に関数を呼び出す必要があります

public string Url
        {
            get {

                return addressBar;
            }
            set { addressBar = value; OnPropertyChanged("Url"); 
                  CommandManager.InvalidateRequerySuggested();
            }
        }
于 2010-10-04T04:33:37.463 に答える