2012-05-10 2 views
0

Я попытался использовать InvokeOperation для получения логического значения из DomainContext в моей модели ViewModel.кнопка привязка IsEnabled после завершения асинхронного вызова вызова на сервер

Как вызовы сервера асинхронны, в том числе вызовы. Мне нужно дождаться завершения вызова (т. Е. Ctx.epidemicContext(). Завершено + = [обработчик событий]). И в вызове complete event я возвращаю значение 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 , // Просмотр

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

Но проблема в том, когда я запустить приложение, IsEnabled свойство Button является обязательным со значением по умолчанию (ложь) в IsChangeLogExist, с изложением его значение свойства из DomainContext из-за асинхронной операции ВЫЗОВ в. перед вызовом callback вызывает OnInvokeCompleted, свойство Isenabled кнопки уже получает значение. значение всегда неверно (поскольку мы не устанавливаем значение, а вызов вызова по-прежнему находится на сервере)

Может кто-нибудь предложить мне, как связать свойство IsEnabled кнопки после получения значения bool с сервера и установить его в методе OnInvokeCompleted ,

ответ

2

Вам необходимо реализовать INotifyPropertyChanged в вашей модели просмотра, а затем поднять это событие PopertyChanged в настройщике свойства IsChangeLogExists. Это обновит пользовательский интерфейс, и новое значение IsChangeLogExist будет использоваться после завершения обратного вызова.

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