2016-11-28 8 views
0

항목 목록이있는 페이지가 있으며 일부 항목이 선택되면 ActivityIndicator가 켜지고 다른 페이지로 이동하여 해제됩니다. 이 새로운 페이지에서 NavigationPage의 BackButton을 클릭하면 항목 목록이있는 페이지로 돌아 오지만 문제는 ActivityIndicator가 켜져 있다는 것입니다 (지속). 어떻게 해결할 수 있습니까?BackButton을 누른 후 ActivityIndicator가 실행 중입니다.

[목록 페이지]

public partial class ResultadosBuscados : ContentPage 
    { 
     public ResultadosBuscados(IEnumerable dadosPesquisados) 
     { 
      IsBusy = false; 
      InitializeComponent(); 
      BindingContext = this; 
      ListaBuscados.ItemsSource = dadosPesquisados; 

     } 

     public void OnItemSelected(object sender, SelectedItemChangedEventArgs e) 
     { 
      IsBusy = true; 
      stackActivity.IsVisible = true; 
      Envolvido envolvSelec = (Envolvido)e.SelectedItem; 
       if (envolvSelec == null) 
        return; 

      IsBusy = false; 
      stackActivity.IsVisible = false; 
      this.Navigation.PushAsync(new EnvolvidoDetalhe(envolvSelec)); 

      this.ListaBuscados.SelectedItem = null; 
     } 

    } 

[XAML 코드의 일부]

<StackLayout x:Name="stackActivity" IsVisible="False" Padding="12" 
      AbsoluteLayout.LayoutFlags="PositionProportional" 
      AbsoluteLayout.LayoutBounds="0.5,0.5,-1,-1"> 
    <Frame Padding="50" OutlineColor="Black" HasShadow="true" AbsoluteLayout.LayoutFlags="PositionProportional" Opacity="0.8" BackgroundColor="Black" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand"> 
     <StackLayout> 
      <ActivityIndicator IsRunning="{Binding IsBusy}" Color ="#F4B400"/> 
      <Label Text="Aguarde..." TextColor="#F4B400"/> 
     </StackLayout> 
     </Frame> 
    </StackLayout> 
+1

이 가능하면 그 'EnvolvidoDetalhe' 페이지 어딘가에 또는 ViewModel에'IsBusy = true;'를 설정하고 사용자가 뒤로 버튼을 누르기 전에 다시 false로 설정하지 않습니까? 나는 EnvvidoDetalhe.OnDisappearing()에서'IsBusy = false;'를 설정하거나'ResultadosBuscados.OnAppearing()'의 맨 위에서 행하도록 제안 할 것이다. 그게 고칠 수 있니? 그렇다면'IsBusy'를'true'로 설정하고'false'로 다시 설정하지 마십시오. – hvaughan3

+0

@ hvaughan3 defult가 false입니다! ListView와 OnItemSelected를 사용하지 않는 다른 페이지에서는 멋지게 작동합니다! 나는 정상적으로 앞뒤로 갈 수있다. OnItemSelected에있을 때 문제가 발생합니다! BackButton을 클릭 한 후 디버깅을 시도했지만 ResultadosBuscados 페이지는 isbusy = false를 기본값으로 가정합니다. –

+0

페이지를 바꿀 때'IsBusy'가 재설정되는지,'IsBusy'가 어떤 페이지로 가도 상관없이 같은 값을 유지하는지 확신 할 수 없습니다. ResultadosBuscados.OnAppearing()에서'IsBusy'를'false'로 설정하려고 했습니까? 실제로'IsBusy' 주석을 읽는 중, "여러 페이지에서 한번에 IsBusy를 true로 설정하면 둘 다 false로 설정 될 때까지 전역 활동 표시기가 실행됩니다. 정리하기 전에 IsBusy 플래그를 설정 해제하는 것은 작성자 작업입니다 위로 페이지. " – hvaughan3

답변

0

내가 코멘트에 말했듯이, 어디 IsBusytrue로 설정되고 다시 설정되지 않는 것을 확인 ~ false. 페이지가 변경되어 다시 바인딩되면 바인딩이 사라지지 않습니다.

또한 멋진 코드를 찾아내어 대부분의 시간 동안 잘 작동하므로 설정에 대해 걱정할 필요가 없습니다. IsBusyfalse으로 설정합니다 (경고하지만주의해야합니다. ViewModel에서 설정할 수 있다고 가정하면, ViewModel에서 작동시키지 않으려는 경우 모든 페이지가 파생되는 코드 ContentPage에 코드를 추가 할 수 있습니다.

코드가 작동하도록 : 그것의 예는 사용 https://github.com/xamarin/Sport/blob/4abddfab1e1cb0e7d14925aa27cae7685dbd5f38/Sport.Mobile.Shared/ViewModels/BaseViewModel.cs#L138

: https://github.com/xamarin/Sport/blob/04f6b99cec752a106d51566ed96231beacfd2568/Sport.Mobile.Shared/ViewModels/AvailableLeaguesViewModel.cs#L41

* 편집 :

예를 오버라이드 (override) OnAppearing :

public partial class ResultadosBuscados : ContentPage { 

    public ResultadosBuscados(IEnumerable dadosPesquisados) { 
     IsBusy = false; 
     InitializeComponent(); 
     BindingContext = this; 
     ListaBuscados.ItemsSource = dadosPesquisados; 
    } 

    protected override void OnAppearing() { 
     base.OnAppearing(); 
     IsBusy = false; 
    } 
} 
+0

Niiiiiii !! 일했습니다 ... 관심을 가져 주셔서 고맙습니다! –

+0

@MCFer 문제 없습니다. 도와 드리겠습니다. 그러나 내가 말했듯이, 그것이 효과가 있다면, 당신이'IsBusy'를'true'로 설정하고'false'로 다시 설정하지 않는다는 것을 의미합니다. 그래서 당신이 사용하는 모든 장소에 대해 당신의 솔루션을 검색해야합니다.'IsBusy' 어디에서 그런 일이 벌어 질지 알아낼 수 있습니다. – hvaughan3

+0

나는 이것을했다! 꼭 ViewCell을 가지고 ItemSelected를 사용할 때의 버그! 왜냐하면 다른 페이지에서, 그것은 일어나지 않습니다. 나는 모든 IsBusy를 찾았다. –