2017-09-15 18 views
0

私はXamarinフォームを作成しています。ボタンをクリックするとActivityIndicatorと表示したいxamlページがあります。xamarinのActivityIndi​​catorが機能しない

IsRunning = Truexamlに設定していますが、コードからこのプロパティを設定すると機能しません。ここで

xaml

<ContentPage.Content> 
     <StackLayout VerticalOptions="StartAndExpand"> 
      <StackLayout> 
       <Image Source="imgmain.png" Aspect="AspectFit"></Image> 
       <Image Source="Companylogo.png" Aspect="AspectFit"></Image> 
      </StackLayout> 
      <!--<BoxView WidthRequest="1"></BoxView>--> 
      <StackLayout HorizontalOptions="StartAndExpand" Padding="10"> 
       <Grid Column="2" Row="4"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="*" /> 
        </Grid.RowDefinitions> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="2*" /> 
        </Grid.ColumnDefinitions> 
        <Label Text="Username :" FontSize="20" TextColor="DarkBlue"></Label> 
        <Entry Placeholder="Username" Grid.Row="0" Grid.Column="1" x:Name="EntryUsername"></Entry> 
        <Label Text="Password :" FontSize="20" TextColor="DarkBlue" Grid.Row="1" Grid.Column="0"></Label> 
        <Entry Placeholder="Password" IsPassword="True" Grid.Row="1" Grid.Column="1" x:Name="EntryPassword"></Entry> 
        <Button Text="Login" Grid.Row="2" Grid.ColumnSpan="2" Clicked="Button_OnClicked"></Button> 
        <ActivityIndicator x:Name="ActivityIndicatorLoading" Grid.Row="3" Grid.ColumnSpan="2" IsRunning="{Binding IsLoading}" IsVisible="{Binding IsLoading}" Color="DarkBlue"></ActivityIndicator> 
       </Grid> 
      </StackLayout> 
     </StackLayout> 

    </ContentPage.Content> 

コードがいいえ」のPropertyChangedありません

public partial class Login : ContentPage, INotifyPropertyChanged 
{ 
    private bool isLoading; 
    public bool IsLoading 
    { 
     set 
     { 
      if (isLoading != value) 
      { 
       isLoading = value; 

       if (PropertyChanged != null) 
       { 
        PropertyChanged(this, 
         new PropertyChangedEventArgs("IsLoading")); 
       } 
      } 
     } 
     get { return isLoading; } 
    } 
    public Login() 
    { 
     InitializeComponent(); 
     IsLoading = false; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void RaisePropertyChanged(string propName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
     } 
    } 

     public void Button_OnClicked(object sender, EventArgs e) 
     { 
      SetLoader(true); 
      IsLoading = true; 
      if (string.IsNullOrEmpty(EntryUsername.Text)) 
      { 
       DisplayAlert("Alert", "Please enter username", "Ok"); 
       IsLoading = false; 
       SetLoader(false); 
       return; 
      } 
      if (string.IsNullOrEmpty(EntryPassword.Text)) 
      { 
       DisplayAlert("Alert", "Please enter password", "Ok"); 
       IsLoading = false; 
       SetLoader(false); 
       return; 
      } 

      LoginManager loginManager=new LoginManager(); 
      User obj = loginManager.ValidateUser(EntryUsername.Text.Trim(), EntryPassword.Text.Trim()); 
      if (obj == null) 
      { 
       DisplayAlert("Error", "username/password is incorrect", "Ok"); 
      } 
      else 
      { 
       Application.Current.Properties["FullName"] = obj.FirstName + " " + obj.LastName; 
       Navigation.PushAsync(new MainPage()); 
      } 

      SetLoader(false); 
      IsLoading = false; 
     } 
    } 

答えて

0

下記のようです(これは、新しいPropertyChangedEventArgs( "IsLoading")); 'IsLoadingプロパティのgetterで。

次に、値が変更されたことを知る方法がありません。

こちらをご覧ください。 https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_binding_basics/

編集:私の最初の答えは申し訳ありません。

「IsLoading」プロパティを持つViewModelクラスを作成する必要があります。 ContentPageのBindingContextプロパティに割り当てます。また、ViewModelクラスのIsLoadingプロパティでPropertyChangedイベントを設定します。最後に、ブーリアン値を置くと動作します。それはMvvMです。

+0

私はPropertyChangedを追加するために私のコードを変更しましたが、まだ動作しません。 – Mahajan344

+0

Oppsをチェックしてください。申し訳ありませんが、ContentPageには既に 'OnPropertyChanged'メソッドがあります。新しいものを宣言しなくても使用できますか? –

+0

そして、そのようなことをするにはViewModelを使うべきです。 ContentPageのBindingContextに何も割り当てていませんでした。次に、 "{バインディングIsLoading}"が機能しません。 –

関連する問題