代码之家  ›  专栏  ›  技术社区  ›  Raj

启用按钮和委派命令

  •  1
  • Raj  · 技术社区  · 15 年前

    我怎样才能使 Button 直到所需数据输入到 TextBox ?

    我正在装订 纽扣 ICommand :

    public ICommand LoginCommand
    {
        get
        {
            if (_loginCommand == null)
            {
                _loginCommand = new DelegateCommand<string>(this.Login, this.IsValid);
            }
            return _loginCommand;
        }
    }
    

    在这样的XAML中:

    <Button Style="{StaticResource LoginButton}" Content="Login" Command="{Binding LoginCommand}" CommandParameter="{Binding Text, ElementName=txtUserName}" />
    
    2 回复  |  直到 13 年前
        1
  •  2
  •   Anderson Imes    15 年前

    你只需要提出请求事件。使用delegatecommand很容易。以下是您的ViewModel的外观。

    另外,如果没有令人信服的理由使您的属性成为delegatecommand类型,那么您应该这样做。

    public class MyViewModel : ViewModel
    {
    
        private string _myTextField;
        public string MyTextField
        {
            get { return _myTextField; }
            set
            {
    
                _myTextField = value;
                OnPropertyChanged("MyTextField");
    
                //Here's the magic
                LoginCommand.RaiseCanExecuteChanged();
    
            }
        }
    
        public DelegateCommand<string> LoginCommand { get; set; }
    
        public MyViewModel()
        {
             LoginCommand = new DelegateCommand<string>(Login, CanLogin);
        }
    
        public bool CanLogin(string text)
        {
             return !string.IsNullOrEmpty(text);
        }
    
        public void Login(string text)
        {
             //login logic
        }
    
    }
    

    差不多就是这样。

        2
  •  1
  •   kiwipom    15 年前

    在哪里 DelegateCommand 定义?检查构造函数,它可能期望第二个参数是谓词,其结果将映射到 ICommand CanExecute .

    我认为 this.IsValid 是一个委托方法,如果要从视图传递的命令参数的string.length>0返回true…尝试将其设置为始终返回false,以检查用户界面是否禁用该按钮。

    编辑: 要将参数获取到isvalid方法中,请使用以下语法:

    更改isvalid方法的语法以接受字符串参数,然后将delegatecommand标记为:

    _loginCommand = new DelegateCommand<string>(this.Login, (param) => this.IsValid(param));
    

    小时:)