启用Button和DelegateCommand

时间:2009-10-19 09:11:40

标签: wpf command prism

如果在Button中输入所需数据,我该如何停用TextBox

我将Button绑定到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 个答案:

答案 0 :(得分:2)

您只需要引发requery事件。使用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
    }

}

这就是它。

答案 1 :(得分:1)

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

我假设CanExecute是委托方法,如果string.Length&gt;返回true。您从View中传递的Command参数为0 ...尝试将其设置为始终返回false只是为了检查UI是否禁用该按钮。

编辑: 要将参数放入IsValid方法,请使用以下语法:

更改IsValid方法的语法以接受字符串参数,然后对您的DelegateCommand进行decalre,如:

this.IsValid

HTH:)