-2
タイトルはすべてです...ボタンをアニメーション化する読み込みアイコンに変更するにはどうすればよいですか?
私は正直にここで迷っています...私はこれを行うためにWPFを使用しています。私はバックグラウンドワーカー、スレッド、Dispatcher.BeginInvoke()、async-awaitを使って私の目標を達成しましたが、無駄にしてみました...私はasync-awaitで解決しました。ここで
は私のコードです:背後
C#コード:
private async void btnLogin_Click(object sender, RoutedEventArgs e)
{
btnLogin.Visibility = Visibility.Hidden;
RollingIcon.Visibility = Visibility.Visible;
await DoLogin();
btnLogin.Visibility = Visibility.Visible;
RollingIcon.Visibility = Visibility.Collapsed;
}
private Task DoLogin()
{
return TaskEx.Run(() => {
//code for validation if no nulls
this.ViewModel.ValidateUserCredentials();
});
}
XAML明らか
<Button x:Name="btnLogin"
Content="Login"
Margin="10,10,10,0"
IsDefault="True"
Foreground="White"
Background="#FF757575"
Click="btnLogin_Click" />
<local:SpinningAnimation x:Name="RollingIcon" Width="40" Height="40" Margin="10,10,10,0" Visibility="Collapsed">
</local:SpinningAnimation >
ViewModelには、目に作成されているので、System.InvalidOperationException
がポップアップ表示されます私は別のスレッドでそれを設定しようとしているときにメインスレッド。
正しい道に私を案内し、ダークサイドから私を保存してください...
何が理解されるであろう。この質問に答えるTIA
あなたはMVVMパターンを使用している場合、私はあなたが恐ろしく間違って何かを得たと思います。 ViewModelからView(UI-Thread)でタスクを実行しようとしていますか? Visibilityもプロパティにバインドする必要があります。隠しが必要な場合は、別のConverterを使用してください。ログインのために、サービスクラスやそのようなものを作成し、それを使用するコマンドにボタンをバインドします。 –
@ダニエル - それは私に考えを与えた。それを試してみましょう!ありがとう!そのdownvoteは本当に痛いほどです。 –
いいえ問題ありません。ここで投稿されているような目的のために、いくつかの(基本的な)MVVMの例を見てください。別のスレッドから実際にアクセスする必要がある場合は、Dispatcher Invokeを使用することができますが、その前にスレッドを理解することをお勧めします。私はあなたにdownvote、笑を与えていない –