0

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

由于对服务器的调用是异步的,包括调用。我需要等待调用完成(即 ctx.epidemicContext().Completed += [an event handler])。在调用完成事件中,我正在检索布尔值并设置属性。

_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}" />

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

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

4

1 回答 1

2

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

public bool IsChangeLogExist
{
    get { return this._IsChangeLogExist; }
    set 
    { 
        this._IsChangeLogExist = value;
        if(PropertyChanged != null)
              PropertyChanged(this, "IsChangeLogExists")
    }
}
于 2012-05-11T05:38:24.810 回答