1

私は簡単なボタンを持っています:

<Button Content="Login" Command="{Binding StartAction}" IsEnabled="{Binding Path=Loading, Converter={StaticResource InverseBooleanConverter}}"/>

ご覧のとおり、IsEnabledはブールプロパティにバインドされています。StartActionが実行されると、ブール値がtrueに設定されるため、ボタンが無効になります(InverseBooleanConverterを使用していることに注意してください)。これは正常に機能します。

ブール値を変更した後、StartAction-methodは、終了時にViewModel(スレッドが作成された場所、つまりStartAction-methodが見つかる場所)でコールバックを呼び出す新しいスレッドを作成します。このコールバックは非常に単純です。

private void DisplayResult()
{
    Loading = false;
}

これでボタンが再び有効になりますが、これは発生しません。

他の場所でloadingをfalseに設定すると、ボタンが有効になります。ボタンと一緒に、他のいくつかの要素(これもこのブール値にバインドされています)は、ブール値が変更されると非表示/表示になり、コールバックメソッドによってLoadingプロパティが変更された場合でも正常に機能します。

私はここで少し混乱しています。なぜそれが機能しないのですか?スレッドと関係があると思いますが、特にUIの他の要素で機能するため、これが機能しない理由はわかりません。

明確にするために、これはLoadingプロパティです。

public bool Loading
{
    get { return loading; }
    set
    {
        if (loading != value)
        {
            loading = value;
            RaisePropertyChanged("Loading");
        }
    }
}

ここで何が間違っているのか考えてみませんか?

ありがとう

4

1 に答える 1

0

コールバックで、そのプロパティを再度確認し、それに応じて更新するように UI に指示する必要がある場合があります。これは で実行されCommandManagerます。コールバック コードに少し追加しました。

private void DisplayResult()
{
    Loading = false;
    CommandManager.InvalidateRequerySuggested();
}

CommandManager.InvalidateRequerySuggested、バインドされたコントロールを必要に応じてすぐに更新するように WPF に指示します。

于 2012-06-19T16:28:50.153 に答える