我尝试使用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属性。
答案 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")
}
}