2014-08-31 1 views
1

일부 필드와 제출 단추가있는 '안녕하세요 세계'양식 (자 마린 양식)이 있습니다. SaveChangesCommand가 실행될 수있을 때를 제어하는 ​​관찰 가능 (CanSave)이 있습니다. CanSave가 false 일 때 저장 버튼을 누르면 사용자에게 메시지를 표시하려고합니다. 아래의 코드와다른 명령에서 명령 실행

, 내가

  1. 는 다음 데이터를 수정 저장
  2. 클릭 (오류 메시지가 표시됩니다) 잘못된 데이터
  3. 를 입력합니다.

버튼을 다시 누르기 전에 CanSave가 실행되고 SaveChangesCommand가 실행됩니다. 마치 이전에 차단 된 버튼 누름이 canExecute가 true가 될 때까지 대기 중이었던 것과 같습니다.

무엇이 누락 되었습니까? 는 "은 buttonClicked 명령을 사용하는 - 이제 우리는 명시 적으로 SaveChangesCommand의 측면에서은 buttonClicked의 명령 사이의 관계를 설명하고

this.SaveChangesCommand = ReactiveCommand.CreateAsyncTask(
    this.CanSave(), 
    message => this.doAllThings(message as string)); 

this.ButtonClickedCommand = ReactiveCommand.CreateAsyncObservable(
    SaveChangesCommand.CanExecuteObservable.StartWith(true), 
    x => SaveChangesCommand.ExecuteAsync(x)); 

이 : 이것에 대해 어떻게

public PersonalProfileModel() 
    { 
     this.SaveChangesCommand = ReactiveCommand.CreateAsyncTask(this.CanSave(), message => this.doAllThings(message as string)); 
     this.ButtonClickedCommand = ReactiveCommand.Create(Observable.Return(true)); 
     this.ButtonClickedCommand.InvokeCommand(this.SaveChangesCommand); 
     // ButtonClickedCommand.Subscribe(x => this.SaveChangesCommand.Execute("hello")); // tried this too 
    } 

    public ReactiveCommand<object> ButtonClickedCommand { get; set; } 
    public ReactiveCommand<string> SaveChangesCommand; 

    public IObservable<bool> CanSave() 
    { 
     var fieldsValid = this.WhenAnyValue(
      x => x.Name, 
      x => x.Country, 
      (f1, f2) => 
       f1 == "a" 
       && f2 == "b"); 
     return fieldsValid; 
    } 

    public Task<string> doAllThings(string message) 
    { 
     var result = Task.Run(() =>{return "hello " + message;}); 
     return result; 
    } 
+0

저는 이것에 대해 더 많이 생각해 봤습니다. 문제의 더 간결한 본질을 생각해 봅니다. http://stackoverflow.com/q/25636199/494635 –

답변

0

:-)

감사합니다 SaveChanges를 실행할 수있는 경우 "

+0

폴 감사합니다. "SaveChanges를 실행할 수있을 때 ButtonClicked 명령을 사용할 수 있습니다." 이것은 실제로 내가 원하지 않는 것입니다. CanSave가 false 일 때 '유효한 데이터를 입력하십시오.'라는 메시지를 표시 할 수 있도록 버튼 클릭을 활성화하고 싶습니다. 그런 다음 CanSave가 true 인 경우에만 저장 명령을 전달하십시오. 이해가 되니? –

관련 문제