0

Xamarin Forms 4.0 最近发布了一个 CollectionView,让我们可以滚动到 collectionView 中的特定项目。

我有一个包含 10 个项目的集合视图,它没有填满屏幕。(微软示例图片)。我正在使用 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}">
4

1 回答 1

1

我将向您展示如何将CollectionView传递给ViewModel
首先,定义2个接口,如

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

接下来,在您的视图上实现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
       }
}

希望这可以帮助。

于 2019-10-02T04:57:33.060 回答