【问题标题】:CommandBinding question. How to enable command button命令绑定问题。如何启用命令按钮
【发布时间】:2010-10-03 09:38:39
【问题描述】:

我的代码在这里>>

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 类

我的代码有什么问题?

请修复我的命令绑定!

【问题讨论】:

  • 首先将CanAttack 改为简单的return (Url != null)。这样你就确定它不是你的正则表达式。或者使用调试器来检查同样的事情。
  • 正则表达式正确。问题是 url 更改后,CanExecute 未引发。
  • 您在独立于 URL 的用户控件中有按钮吗?

标签: wpf binding commandbinding


【解决方案1】:

我自己找到的。

更改属性后必须调用CommandManager.InvalidateRequerySuggested();函数

public string Url
        {
            get {

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

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 2015-02-24
    • 2016-06-25
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 2014-08-29
    • 2020-11-18
    • 2013-09-16
    相关资源
    最近更新 更多