2012-05-10 5 views
0

InvokeOperation을 사용하여 내 ViewModel의 DomainContext에서 부울 값을 가져 오려고했습니다.단추 서버에 대한 비동기 호출 호출이 완료된 후 IsEnabled 바인딩

서버 호출은 호출을 포함하여 비동기입니다. 호출이 완료 될 때까지 기다려야합니다 (즉, ctx.epidemicContext(). Completed + = [이벤트 처리기]). 그리고 invoke complete 이벤트에서 나는 bool 값을 retriving하고 속성을 설정하고 있습니다. // OnInvoke 세트

_context.IsChangeLogStarted(OnInvokeCompleted, null); 

재산

private void OnInvokeCompleted(InvokeOperation<bool> invOp) 
     {   
      IsChangeLogExist = invOp.Value; 
     } 

// 재산권

public bool IsChangeLogExist 
     { 
      get { return this._IsChangeLogExist; } 
      set { this._IsChangeLogExist = value; } 
     } 

그리고 내보기에 나는 버튼의 IsEnabled 속성에 "IsChangeLogExist"를 결합하기 위해 노력하고있어 . //보기

<Button IsEnabled="{Binding IsChangeLogExist}" Command="{Binding Source={StaticResource ProxyViewModel}, Path=StartChangeLogCommand}" CommandParameter="{Binding}" /> 

그러나 문제는 내가 응용 프로그램을 실행할 때, 버튼의 IsEnabled 속성이 밖으로는 호출의 비동기 작업으로 인해 domaincontext에서 해당 속성 값을 설정으로, IsChangeLogExist의 기본값 (false)를 바인딩이다. Invoke 콜백이 OnInvokeCompleted를 호출하기 전에 단추의 Isenabled 속성에 값이 이미 있습니다. 값은 항상 false입니다 (값을 설정하지 않고 호출 호출이 아직 서버에 있기 때문에)

서버에서 bool 값을 가져온 후 OnInvokeCompleted 메서드에서 설정 한 후 단추의 IsEnabled 속성을 바인딩하는 방법을 제안 할 수 있습니까? .

답변

2

뷰 모델에서 INotifyPropertyChanged를 구현 한 다음 "IsChangeLogExists"속성의 setter에서이 PopertyChanged 이벤트를 발생시켜야합니다. 그러면 UI가 새로 고쳐지고 콜백이 완료된 후 IsChangeLogExist의 새 값이 사용됩니다.

public bool IsChangeLogExist 
{ 
    get { return this._IsChangeLogExist; } 
    set 
    { 
     this._IsChangeLogExist = value; 
     if(PropertyChanged != null) 
       PropertyChanged(this, "IsChangeLogExists") 
    } 
} 
관련 문제