在对服务器的异步调用调用完成后,按钮IsEnabled绑定

时间:2012-05-10 22:20:22

标签: silverlight silverlight-4.0 wcf-ria-services ria

我尝试使用InvokeOperation从ViewModel中的DomainContext获取布尔值。

对服务器的调用是异步的,包括调用。我需要等待调用完成(即ctx.epidemicContext()。已完成+ = [事件处理程序])。在调用完整事件时,我正在重新检索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”绑定到Button的IsEnabled属性。 //视图

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

但问题是当我运行应用程序时,Button的IsEnabled属性与IsChangeLogExist的默认值(false)绑定,由于Invoke的异步操作而没有从domaincontext设置其属性值。 在调用callback之前调用OnInvokeCompleted,按钮的Isenabled属性已经获取了值。 value始终为false(因为我们没有设置值,并且调用调用仍在服务器上)

有人建议我在从服务器获取bool值并在OnInvokeCompleted方法中设置它之后如何绑定按钮的IsEnabled属性。

1 个答案:

答案 0 :(得分:2)

您需要在视图模型中实现INotifyPropertyChanged,然后在属性“IsChangeLogExists”的setter中引发此PopertyChanged事件。这将刷新UI,并且在回调完成后将使用IsChangeLogExist的新值。

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