2016-03-16 4 views
1

У меня есть следующий список элементов в моей модели просмотра. Я показываю по одному пункту одновременно в представлении. Предположим, что первый элемент, который является A. Но когда пользователь щелкает вправо или влево, я хочу, чтобы View обновлялся и показывал следующий элемент, например B.Проведите влево или вправо, чтобы обновить текущий вид, используя MVVMCross

Интересно, как проведите пальцем вправо или влево, чтобы выполнить итерацию по элементу списка используя mvvmcross? Даже знать направление салфетки было бы более чем достаточно.

Я смотрю на следующий адрес, чтобы узнать MvxGestureRecognizerBehavior но сломана

https://github.com/MvvmCross/MvvmCross-Build/blob/master/MvvmCross/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/Gestures/MvxGestureRecognizerBehavior.cs

public RViewModel() 
{ 
    Items = new ObservableCollection<ListItem> { 
     new ListItem { Title = "A" }, 
     new ListItem { Title = "B" }, 
     new ListItem { Title = "C" }, 
     new ListItem { Title = "D" }, 
     new ListItem { Title = "E" } 
    }; 
} 

Примечание: Пожалуйста, имейте в виду, я мог бы иметь возможность использовать viewpager, но так как я загрузки аналогичный контент (просто TextView) в представлении, я не хочу создавать несколько фрагментов для итерации по каждому элементу. Поэтому я хочу обновить только TextView/View с помощью действия «влево/вправо».

+0

Я думаю, что вы ищете для этого [файл] (https://github.com/MvvmCross/MvvmCross-Build/ blob/969c892bf4ed9c82200a7fa3d609fbeba82376dc/MvvmCross/MvvmCross/Binding/iOS/Views/Gestures/MvxGestureRecognizerBehavior.cs), но, похоже, для IOS. Что касается вопроса, я боюсь, что не могу помочь, я не эксперт по MvvmCross –

+0

То есть iOS, я ищу Android. Спасибо Ric.Net. – hotspring

ответ

2

Создайте интерфейс IMotionViewModel с помощью метода обработки салфетки. Примените его к ViewModel

В вашей деятельности по дроиду реализуйте интерфейс GestureDetector.IOnGestureListener. Обращайтесь к событию движения, в котором вы нуждаетесь, и получите доступ к ViewModel и передайте там движение или аргументы.

ViewModel

public interface IMotionViewModel 
{ 
    void OnSwipe(bool swipeRight); 
} 

public class FirstViewModel : MvxViewModel, IMotionViewModel 
{ 
    public ObservableCollection<ListItem> Items { get; set; } 
    private string _currentString = "Hello MvvmCross"; 
    public string CurrentString 
    { 
     get { return _currentString; } 
     set { SetProperty(ref _currentString, value); } 
    } 

    public FirstViewModel() 
    { 
     Items = new ObservableCollection<ListItem> { 
       new ListItem { Title = "A" }, 
       new ListItem { Title = "B" }, 
       new ListItem { Title = "C" }, 
       new ListItem { Title = "D" }, 
       new ListItem { Title = "E" } 
      }; 
    } 

    public void OnSwipe(bool swipeRight) 
    { 
     //do list iteration here.... 
    } 
} 

Droid активность

[Activity(Label = "View for FirstViewModel")] 
public class FirstView : MvxActivity, Android.Views.GestureDetector.IOnGestureListener 
{ 
    private GestureDetector _gestureDetector; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     SetContentView(Resource.Layout.FirstView); 
     _gestureDetector = new GestureDetector(this); 
    } 

    public override bool OnTouchEvent(MotionEvent e) 
    { 
     _gestureDetector.OnTouchEvent(e); 
     return false; 
    } 

    public bool OnDown(MotionEvent e) 
    { 
     return false; 
    } 

    public bool OnFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
    { 
     var isSwipingRight = (e2.RawX - e1.RawX) > 0 ? true : false; 

     var motionVm = base.ViewModel as IMotionViewModel; 
     motionVm.OnSwipe(isSwipingRight); 
     return true; 
    } 

    public void OnLongPress(MotionEvent e) { } 

    public bool OnScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 
    { 
     return false; 
    } 

    public void OnShowPress(MotionEvent e) { } 

    public bool OnSingleTapUp(MotionEvent e) 
    { 
     return false; 
    } 
} 
Смежные вопросы