Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ViewModel中使用MVVM Prism和ReactiveCommand滚动到项目?_C#_Xamarin.forms_Prism_Reactiveui_Xamarin Forms 4 - Fatal编程技术网

C# 如何在ViewModel中使用MVVM Prism和ReactiveCommand滚动到项目?

C# 如何在ViewModel中使用MVVM Prism和ReactiveCommand滚动到项目?,c#,xamarin.forms,prism,reactiveui,xamarin-forms-4,C#,Xamarin.forms,Prism,Reactiveui,Xamarin Forms 4,Xamarin Forms 4.0最近发布了一个CollectionView,允许我们滚动到CollectionView中的特定项目 我有一个集合视图,其中有10个项目没有填满屏幕。(). 我正在使用ReactiveUI和MVVM Prism来处理ViewModel中的所有逻辑 到目前为止,我能够使用SelectedItem和SelectionChangedCommand处理基于单击的导航。我想处理的下一个功能是滚动到我选择的项目。我已经在论坛上搜索过了,但没有运气。该示例仅显示如何在代码隐藏中

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}">

我将向您演示如何将CollectionView传递到ViewModel
首先,定义两个接口,如

公共接口IHasCollectionViewModel{
IHasCollectionView视图{get;set;}
}
公共接口IHasCollectionView{
CollectionView CollectionView{get;}
}
接下来,在视图上执行ihascolection

公共类YourView:ContentPage,IHasCollectionView{
CollectionView CollectionView=>ScrollButtons;//您的CollectionView x:Name
受保护的覆盖无效OnBindingContextChanged()
{
if(this.BindingContext是IHasCollectionViewModel hasCollectionViewModel)
{
hasCollectionViewModel.View=此;
}
base.OnBindingContextChanged();
}
}
接下来,在您的视图模型上实现IHasCollectionViewModel

公共类YourViewModel:IHasCollectionViewModel{
公共IHasCollectionView视图{get;set;}
//像使用CollectionView一样使用
私有无效ScrollToItem(整数索引){
View.CollectionView.ScrollTo(索引);//不要忘记检查null
}
}

希望这有帮助。

对不起,您想手动滚动到SelectedItem,还是想在CollectionView滚动到SelectedItem时处理?@PhatHuynh手动滚动到所选项目。我在屏幕底部有一个菜单栏,有10个菜单项,我单击第7或第8项,它将导航到该页面,我希望能够使用Prism/Reactive命令滚动到我单击的项目。您需要在ViewModel上获取CollectionView,然后使用ScrollTo方法。@PhatHuynh如何将CollectionView连接到ViewModel?我只绑定了属性。我一直在想这可能是最好的方法。我知道可以在Xamarin表单中使用x:Name=myCollectionView,并且可以在代码中引用它。如何在视图模型中引用collectionView。可以通过在视图上处理BindingContextChanged将其传递给ViewModel。