2017-05-20 1 views
0

Quelqu'un peut-il me dire ce qui ne va pas avec mon code? J'essaie d'obtenir l'actualisation pour fonctionner sur ma page xaml et cela ne fonctionnera pas pour Android ou iPhone. Je pense que c'est peut-être comme ça que ma liste de lecture est présentée. Quelqu'un peut-il me dire s'il y a quelque chose dans le ListView qui pourrait empêcher la commande Refresh de se déclencher? Voici mon code XAML pour le ListViewTirer pour rafraîchir ne fonctionne pas dans Xamarin Forms ListView

<ContentPage.Content> 
    <ListView x:Name="TDRView" HasUnevenRows="True" ItemTapped="OnItemTapped" IsPullToRefreshEnabled="True" RefreshCommand="{Binding RefreshCommand}" IsRefreshing="{Binding IsRefreshing}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <ViewCell> 
        <ViewCell.View> 
         <Grid x:Name ="gridTDR"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="Auto" /> 
          </Grid.RowDefinitions> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="50*" /> 
           <ColumnDefinition Width="25*" /> 
           <ColumnDefinition Width="25*" /> 
          </Grid.ColumnDefinitions> 
          <StackLayout HorizontalOptions="StartAndExpand" VerticalOptions="CenterAndExpand" Grid.Column="0" Grid.Row="0"> 
           <Label x:Name="lblTDRID" Text="{Binding TDRID}" IsVisible="false" /> 
           <Label x:Name="lblCustName" Text="{Binding CustomerName}" FontSize="Medium" TextColor="Black" /> 
          </StackLayout> 
          <Button Image="iconApprove.png" Clicked="OnApproveButtonClicked" Grid.Column="1" Grid.Row="0" VerticalOptions="Center" BackgroundColor="Transparent" /> 
          <Button Image="iconReject.png" Clicked="OnRejectButtonClicked" Grid.Column="2" Grid.Row="0" VerticalOptions="Center" BackgroundColor="Transparent" /> 
         </Grid> 
        </ViewCell.View> 
       </ViewCell> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</ContentPage.Content> 

Et voici les méthodes dans le code derrière ...

using System; 
using System.Collections.ObjectModel; 
using System.Linq; 
using System.Threading.Tasks; 
using System.Windows.Input; 
using Xamarin.Forms; 

namespace AppNameSpace 
{ 
    public partial class MainPage : ContentPage 
    { 
     ObservableCollection<TDR> collection = new ObservableCollection<TDR>(); 

     private bool _isRefreshing = false; 
     public bool IsRefreshing 
     { 
      get { return _isRefreshing; } 
      set 
      { 
       _isRefreshing = value; 
       OnPropertyChanged(nameof(IsRefreshing)); 
      } 
     } 

     public ICommand RefreshCommand 
     { 
      get 
      { 
       return new Command(async() => 
       { 
        IsRefreshing = true; 
        await Service.GetPendingTDRs(); 
        IsRefreshing = false; 
       }); 
      } 
     } 

     public MainPage() 
     { 
      InitializeComponent(); 
      TDRView.ItemsSource = collection; 
      GetTDRs(); 
     } 
    } 
    } 

Merci!

+0

Avez-vous réellement utilisé le débogueur pour vérifier si le cmd de rafraîchissement est en train de se déclencher ou non? – Jason

+0

Oui, j'ai débogué et défini des points d'arrêt et ça ne va pas dire – Stunshaw

+0

Quand vous avez dit "ça ne marche pas" vous entendiez dans iOS par exemple en tirant la liste l'indicateur apparaît et il commence à tourner mais ça continue comme ça et la liste n'est jamais rafraichie ? pourriez-vous également mettre à jour votre message en montrant votre code complet derrière? – apineda

Répondre

0

Vous n'êtes pas le BindingContext couchait votre XAML. Vous avez besoin de cela pour que le XAML sache quand vous utilisez des liaisons dans votre cas dans ListView pour RefreshCommand et Refreshing.

Pour ce faire, il suffit d'ajouter cette ligne de code dans le constructeur vous MainPage BindingContext = this;

Quelque chose comme:

public MainPage() 
{ 
    InitializeComponent(); 
    BindingContext = this; 
    TDRView.ItemsSource = collection; 
    GetTDRs(); 
} 

this signifie que le code sous-jacent servira de contexte de liaison de votre XAML.

Espérons que cela aide.-

+0

Ça l'a fait! Merci! – Stunshaw

0

faites attention au système d'exploitation sur lequel vous testez/utilisez le pull to refresh.

pull-to-refresh n'est pas pris en charge sur Windows Phone 8.1. Sur Windows Phone 8, tirer-pour-rafraîchir n'est pas une fonctionnalité native de la plateforme, donc une implémentation de pull-to-refresh est fournie par Xamarin.Forms. Enfin, sachez que pull-to-refresh ne fonctionnera pas sur Windows Phone si tous les éléments de la liste peuvent tenir sur l'écran (en d'autres termes, si le défilement vertical n'est pas requis).

https://developer.xamarin.com/guides/xamarin-forms/user-interface/listview/interactivity/#Pull_to_Refresh