Xamarin.Formsでクロスプラットフォームモバイルアプリを開発しています。アプリがビジー状態のときのアクティビティインジケータの表示
私は、単純なアクティビティインジケータとIボタンでWebサービスにPOSTをシミュレートしようとしています。私はボタン上でそれをしたいと思うアクティビティインジケータが表示され、IsLoadingプロパティがfalseに設定されるまで残る。
ここに私のXAML:
<AbsoluteLayout x:Name="layOuter">
<ActivityIndicator x:Name="actWebRequest"
IsVisible="{ Binding IsLoading,
Mode=TwoWay }"
IsRunning="{ Binding IsLoading,
Mode=TwoWay }"
AbsoluteLayout.LayoutBounds="0.5, 0.5, 100, 100"
AbsoluteLayout.LayoutFlags="PositionProportional" />
<Button x:Name="btnLogin"
IsVisible="{ Binding Show,
Mode=TwoWay }"
Text="{ StaticResource LoginButtonText }"
Command="{ Binding LoginCommand }"
BackgroundColor="Teal" />
</AbsoluteLayout>
そして、彼LoginCommand:
公開イベントPropertyChangedEventHandlerのPropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected void SetValue<T>(ref T backingField, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(backingField, value))
return;
backingField = value;
OnPropertyChanged(propertyName);
}
private bool _isLoading;
private bool _show;
public bool IsLoading { get { return _isLoading; } set { SetValue(ref _isLoading, value); } }
public bool Show { get { return _show; } set { SetValue(ref _show, value); } }
private void Login()
{
IsLoading = true;
Show = false;
// DoSomething()
System.Threading.Tasks.Task.Delay(5000).Wait();
IsLoading = false;
Show = true;
}
ログインボタンをタップしても何も起こりませんが、5秒後にアプリケーションは別のアプリケーションにナビゲートします。私もACR User Dialogsを試しましたが、うまくいきません。
アプリはAndroidとiOSに対応している必要があります。
私を助けることができますか?おかげさまで
EDIT:
はい、私はこのようにWievModelにページをバインドさ:私は何を意味
public class ContentBase<T> : ContentPage where T : class, new()
{
public T ViewModel
{
get { return BindingContext as T; }
set { BindingContext = value; }
}
public ContentBase() { ViewModel = new T(); }
}
public class LoginPageBase : ContentBase<LoginViewModel> { }
public partial class LoginPage : LoginPageBase
{
public LoginPage()
{
InitializeComponent();
}
protected override bool OnBackButtonPressed()
{
return true;
}
}
public class LoginViewModel : ViewModelBase
{
private bool _isLoading;
private bool _show;
public bool IsLoading { get { return _isLoading; } set { SetValue(ref _isLoading, value); } }
public bool Show { get { return _show; } set { SetValue(ref _show, value); } }
}
は、私がログインボタンをタップするとアクティビティインジケータが私さえあれば表示されないということですIsLoadingをtrueに設定します。
'ログインボタンをタップすると何も起こらず、5秒後にアプリケーションは別のアプリケーションにナビゲートします。 - 詳しく教えてください。ページ/ビューのバインディングコンテキストを設定しましたか? – EvZ
私はいくつかのコードを追加しました。ナビゲーションについて私が意味するのは、このページはログインページです。実際のコードでは、ログイン方法の最後にアクティビティインジケータのみを表示したいので、資格情報のチェック手順についてコメントしました.'Application.Current.MainPage =新しいNavigationPage(新しいHomePage()) 'ボタンをタップすると、アクティビティインジケータが表示されず、5秒後にHomePageに移動します。 –
IsLoading TwoWayのバインドはなぜですか? –