Как перейти к элементу с помощью MVVM Prism и ReactiveCommand во ViewModel? - PullRequest
0 голосов
/ 02 октября 2019

Xamarin Forms 4.0 недавно выпустила CollectionView, который позволяет нам прокручивать до определенного элемента в collectionView.

У меня есть представление коллекции с 10 элементами в нем, которое не заполняет экран. ( Образец изображения Microsoft ). Я использую ReactiveUI и MVVM Prism для обработки всей моей логики в моей ViewModel.

До сих пор я мог обрабатывать навигацию на основе кликов, используя SelectedItem и SelectionChangedCommand. Следующей функцией, которую я хотел обработать, была прокрутка до выбранного элемента. Я искал по форумам и не повезло. В этом примере показано только, как это сделать в коде, а не через MVVM Prism / ReactiveUI. Заранее спасибо!

<CollectionView x:Name="ScrollButtons"
                ItemsSource="{Binding MenuItems}"
                SelectedItem="{Binding SelectedMenuItem}"
                Grid.Row="2" 
                Grid.Column="0"
                Grid.ColumnSpan="2" 
                HeightRequest="90"
                SelectionMode="Single"
                SelectionChangedCommand="{Binding MenuItemSelectedCommand}"
                BackgroundColor="{DynamicResource BackgroundColorShell}">

1 Ответ

0 голосов
/ 02 октября 2019

Я покажу вам, как передать CollectionView на ViewModel .
Сначала определите 2 интерфейса, например

public interface IHasCollectionViewModel{
  IHasCollectionView View {get;set;}
}
public interface IHasCollectionView{
  CollectionView CollectionView {get;}
}

Далее на вашем View реализует IHasCollection

public class YourView: ContentPage, IHasCollectionView {
   CollectionView CollectionView => ScrollButtons; // your CollectionView x:Name
   protected override void OnBindingContextChanged()
   {
            if (this.BindingContext is IHasCollectionViewModel hasCollectionViewModel)
            {
                hasCollectionViewModel.View = this;
            }
            base.OnBindingContextChanged();
   }
}

Далее, на вашем ViewModel реализуется IHasCollectionViewModel

public class YourViewModel: IHasCollectionViewModel {
       public IHasCollectionView View { get; set; }
       // use CollectionView like
       private void ScrollToItem(int index){
             View.CollectionView.ScrollTo(index); // don't forget check null
       }
}

Надеюсь, это поможет.

...