2012-05-10 72 views
0

我試圖使用InvokeOperation從我的ViewModel中的DomainContext獲取布爾值。按鈕異步調用服務器調用完成後IsEnabled綁定

由於對服務器的調用是異步的,包括調用。我需要等待調用完成(即ctx.epidemicContext()。Completed + = [一個事件處理程序])。在invoke complete事件中,我正在回顧bool值並設置一個屬性。

_context.IsChangeLogStarted(OnInvokeCompleted, null); 

// OnInvoke全套屬性

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

//房產

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

在我看來,我試圖以 「IsChangeLogExist」 綁定到按鈕的IsEnabled屬性。 //查看

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

但問題是,當我運行應用程序,按鈕的IsEnabled屬性與IsChangeLogExist的默認值(false)結合,利用了從到期調用的異步操作的domaincontext設置其屬性值。 在調用回調之前調用OnInvokeCompleted,該按鈕的Isenabled屬性已經獲取該值。值總是假的(因爲我們沒有設置值,並且調用調用仍在服務器上)

有人可以建議我在從服務器獲取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") 
    } 
}