2017-03-27 1 views
0

J'ai créé une vue de liste dans une classe et j'ai appelé la méthode delete d'une autre classe. Listview reçoit l'appel mais ne met pas à jour la vue de liste si j'appelle d'une autre classe. Mais sa mise à jour lorsque j'appelle à l'intérieur de la même classe. Comment résoudre ce problème?Comment mettre à jour la vue liste d'une autre classe dans les formulaires Xamarin?

namespace New 
{ 
    public partial class WishesPage : ContentPage 
    { 
     ListView listView = new ListView(); 

     public WishesPage() 
     { 
      InitializeComponent(); 

      var arr = JToken.Parse(ids); 

      foreach (var ite in arr.Children()) 
      { 
       var itemProperties = ite.Children<JProperty>(); 
       string contactElement = itemProperties.FirstOrDefault(x => x.Name == "contact").Value.ToString(); 
       sample.Add(contactElement); 
      } 

      listView.ItemTemplate = new DataTemplate(typeof(CustomListCell)); 
      listView.ItemsSource = sample; 

      Content = new StackLayout 
      { 
       Children = 
       { 
        listView, 
       } 
      }; 
     } 

     public async Task delete(string wishid) 
     { 
      indicator.IsRunning = true; 

      var client = new HttpClient(); 
      client.BaseAddress = new Uri("http:……”); 

      if (response == "success") 
      { 
       listView.ItemsSource = null; 
       listView.ItemsSource = sample; 
      } 
     } 
    } 

    public class CustomListCell : ViewCell 
    { 
     public CustomListCell() 
     { 
       wishIdLabel.SetBinding(Label.TextProperty, new Binding("contact")); 

      horizontalLayout.Children.Add(wishIdLabel); 

      var deleteAction = new MenuItem { Text = "Delete", IsDestructive = true }; 
      deleteAction.Clicked += async (sender, e) => 
      { 
       WishesPage wishes = new WishesPage(); 
       wishes.delete(wishId); 
      }; 
      ContextActions.Add(deleteAction); 
     } 
    } 
} 
+0

Qu'est-ce que "sample"? –

+0

C'est un tableau d'éléments. J'ai créé en utilisant la classe Modal. Like (sample = new ObservableCollection ();) – Jeni

+0

Je ne comprends pas pourquoi vous créez une autre WishesPage dans deleteAction.Clicked ... WishesPage wishes = new WishesPage(); wishes.delete (wishId); –

Répondre

0

J'ai mis à jour this repo qui expliquent comment utiliser les commandes dans un ViewCell.

Dans votre cas, vous devez déplacer la construction de ViewCell dans ContentPage. Quelque chose comme

 lv.ItemTemplate = new DataTemplate(() => 
     { 

      StackLayout slView = new StackLayout(); 

      Label lDesc = new Label(); 
      lDesc.SetBinding(Label.TextProperty, "Description", stringFormat: "DESCRIPTION: {0}"); 

      var deleteAction = new MenuItem { Text = "Delete", IsDestructive = true }; // red background 
      deleteAction.SetBinding(MenuItem.CommandProperty, new Binding("BindingContext.TrashCommand", source: this)); 
      deleteAction.SetBinding(MenuItem.CommandParameterProperty, "."); 

      slView.Children.Add(lDesc); 

      ViewCell vc = new ViewCell() {View = slView }; 
      vc.ContextActions.Add(deleteAction); 

      return vc; 
     } 

Maintenant, lorsque vous Longpress la ligne, un ContextAction « Supprimer » apparaît et une TrashCommand dans votre ViewModel est exécuté (vous devez utiliser MVVM ...), un paramètre « ces » est passé (la obj sélectionné) de sorte que vous pouvez le supprimer de la liste

 this.TrashCommand = new Command(async (object obj) => { 

      try 
      { 
       if (_isTapped) 
        return; 

       if (obj != null) 
        System.Diagnostics.Debug.WriteLine("Obj is not null"); 
       else 
        System.Diagnostics.Debug.WriteLine("Obj IS null"); 


       _isTapped = true; 
       var ret = await Application.Current.MainPage.DisplayAlert("Attention", "Delete this row?", "Yes", "No"); 

       if (ret) 
       { 

        // List is your "sample" list... Removing the obj, is it reflected to ListView if you use ObservableCollection instead of List 
        List.Remove((Model)obj); 
        Count = List.Count; 
       } 

       _isTapped = false; 

      } 
      catch (Exception ex) { 
       _isTapped = false; 
       await Application.Current.MainPage.DisplayAlert("Attention", ex.Message, "Ok"); 
      } 
     }); 
    } 
+0

Merci .. Laissez-moi essayer ces – Jeni