2014-09-17 12 views
5

Chcę zaimplementować przesunięcie, aby usunąć funkcjonalność w formularzach Xamrin, dla których próbowałem następujące.Formularze Xamrin: Przesuń, aby usunąć (gest) w ListView

  1. Wrote niestandardowy mechanizm renderujący do widoku listy i w „OnElementChanged” renderującego jestem w stanie uzyskać dostęp do binded polecenie do „CustomListView” i jestem w stanie dodać to polecenie do gest machnięcia dodany poniżej .

    swipeGestureRecognizer = new UISwipeGestureRecognizer (() => { 
         if (command == null) { 
          Console.WriteLine ("No command set"); 
          return;} 
    
         command.Execute (null); 
        }); 
    

Jednak mam problemy w dostępie do określonego wiersza (przeciągnął wiersz), tak, że mogę zrobić przycisk widoczny/ukryty na przeciągnął wiersza w widoku listy. Czy mógłbyś polecić sposób wdrożenia tego samego?

+0

Dodam gest do ItemTemplate lub UITableCell zamiast. – SKall

+0

Osiągnąłeś to także dla Androida? –

Odpowiedz

4

Można zrobić coś takiego:

protected override void OnElementChanged (ElementChangedEventArgs<ListView> e) 
    { 
     base.OnElementChanged (e); 
     var swipeDelegate = new SwipeRecogniserDelegate(); 
     swipeGestureRecognizer = new UISwipeGestureRecognizer { 
      Direction = UISwipeGestureRecognizerDirection.Left, 
      Delegate = swipeDelegate 
     }; 
     swipeGestureRecognizer.AddTarget (o => { 
      var startPoint = swipeDelegate.GetStartPoint(); 
      Console.WriteLine (startPoint); 
      var indexPath = this.Control.IndexPathForRowAtPoint(startPoint); 
      if(listView.SwipeCommand != null) { 
       listView.SwipeCommand.Execute(indexPath.Row); 
      } 
     }); 
     this.Control.AddGestureRecognizer (swipeGestureRecognizer); 
     this.listView = (SwipableListView)this.Element; 
    } 

Kluczem jest SwipeRecogniserDelegate. jest zaimplementowana w następujący sposób:

public class SwipeRecogniserDelegate : UIGestureRecognizerDelegate 
{ 
    PointF startPoint; 

    public override bool ShouldReceiveTouch (UIGestureRecognizer recognizer, UITouch touch) 
    { 
     return true; 
    } 

    public override bool ShouldBegin (UIGestureRecognizer recognizer) 
    { 
     var swipeGesture = ((UISwipeGestureRecognizer)recognizer); 
     this.startPoint = swipeGesture.LocationOfTouch (0, swipeGesture.View); 
     return true; 
    } 

    public PointF GetStartPoint() 
    { 
     return startPoint; 
    } 
} 
4

Przesunięcie do usunięcia jest teraz wbudowane w XViewin Froms ListViews przy użyciu ContextAction. Oto najbardziej podstawowy samouczek, jak to zrobić. Jest bardzo łatwy do wdrożenia.

http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/listview/

+1

Implementacja formularzy xamarin obejmuje najbardziej podstawowy przypadek użycia. FYI: Niestety, nie można przesuwać palcem w prawo za pomocą implementacji formularzy xamarin. Utkniesz także z najbardziej podstawowymi elementami menu, których naprawdę nie możesz w ogóle dostosować (np. Wybierz inną czcionkę dla tekstu), co oznacza, że ​​musisz od razu zacząć przeglądać niestandardowe renderers. – wislon

+0

Tak, znalazłem dokumentację do tego w szczególności bardzo brakuje. – Sam07

Powiązane problemy