2009-10-19 5 views
1

에 필수 데이터가 입력 될 때까지 Button을 어떻게 비활성화 할 수 있습니까? 이 같은 XAML에서버튼 및 DelegateCommand 활성화

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

:

<Button Style="{StaticResource LoginButton}" Content="Login" Command="{Binding LoginCommand}" CommandParameter="{Binding Text, ElementName=txtUserName}" /> 

답변

2

단지 재귀 이벤트를 발생시켜야합니다. 이것은 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 
    } 

} 

꽤 많이 있습니다.

+0

죄송합니다. 이 문장을 이해하십시오. "또한 DelegateCommand를 입력하는 속성을 만들만한 강력한 이유가 없으면 그렇게해야합니다." 예상되는 것은 "... 그렇게해서는 안됩니다"또는 "그렇게할만한 이유가 없더라도 항상 DelegateCommand를 사용해야합니다." –

1

경우가 DelegateCommand가 정의

나는 ButtonICommand에 바인딩거야? 생성자를 검사하면 두 번째 매개 변수가 술어가 될 것으로 예상되며 그 결과는 ICommandCanExecute에 매핑됩니다.

내가보기에서 전달하는 Command 매개 변수에 대해 string.Length> 0이면 true를 반환하는 대리자 메서드라고 가정합니다 ... UI를 확인하기 위해 항상 false를 반환하도록 설정해보십시오. 단추.

편집 : 다음, 문자열 매개 변수를 받아처럼 DelegateCommand을 decalre하는

변경 IsValid 방법의 구문은 다음과 같습니다 :

_loginCommand = new DelegateCommand<string>(this.Login, (param) => this.IsValid(param)); 
다음과 같은 구문을 사용 IsValid 방법에 PARAM를 얻으려면

HTH :)

+0

this.IsValid() 메서드가 false를 반환하면 UI가 버튼을 비활성화합니다. 이는 UI가로드되는 즉시 Button이 비활성화됨을 의미합니다. 텍스트 상자에 내용이 없기 때문입니다. 내 질문은 true로 검증 할 수있는 텍스트가 TextBox에 입력 된 경우 버튼을 활성화하는 방법입니까? – Raj

+0

DelegateCommand는 Composite WPF 일명 Prism 라이브러리에서 가져온 것입니다. Microsoft.Practices.Composite.Presentation.Commands – Raj

+0

CommandParameter를 메서드에 전달해야합니다. 응답을 업데이트하여 방법을 알려줍니다. – kiwipom

관련 문제