私は簡単なボタンを持っています:
<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");
}
}
}
ここで何が間違っているのか考えてみませんか?
ありがとう