0

InvokeOperation を使用して、ViewModel の DomainContext からブール値を取得しようとしました。

サーバーへの呼び出しは、呼び出しを含めて非同期であるため。呼び出しが完了するのを待つ必要があります (つまり、ctx.epidemicContext().Completed += [イベント ハンドラー])。インボーク・コンプリート・イベントでは、ブール値を取得してプロパティを設定しています。

_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) にバインドされ、Invoke の非同期操作のためにドメインコンテキストからプロパティ値を設定せずにバインドされることです。呼び出しコールバックが OnInvokeCompleted を呼び出す前に、ボタンの Isenabled プロパティは既に値を取得しています。value は常に false (値を設定しておらず、invoke 呼び出しがまだサーバーにあるため)

サーバーから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 に答える