我有MyPage
CarouselView
,下方有两个按钮。这些按钮用于在ContentView
:
CarouselView
个视图之间导航
[CarouselView]
[Prev] [Next]
ContentViewA
和ContentViewB
位于CarouselView
MyPageViewModel
包含上一个和下一个按钮的命令:
class MyPageViewModel : BindableBase
{
public ICommand ShowPrevCommand { get; private set;}
public ICommand ShowNextCommand { get; private set;}
}
如何实施命令以使CarouselView
显示视图?
根据文件here
在棱镜中,导航到视图或导航到视图的概念 ViewModel不存在。相反,您只需导航到 体验,或代表目标视图的唯一标识符 您希望导航到您的应用程序
所以我以为我可以使用INavigationService。
我以为我可以实现自己的NavigationService
和NavigateAsync
我可以检查当前页面是否为MyPage
。如果是,我可以根据导航名称参数将CarouselView
内的视图设置为视图。
但我不确定如何实施和覆盖Prism的导航服务。
Xamarin Forms的棱镜可以做这样的事吗?
答案 0 :(得分:1)
它不一定非常复杂。 CarouselView
具有可绑定属性Position
,您可以将其绑定到viewmodel的属性
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:forms="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.CarouselView">
<ContentPage.Content>
<forms:CarouselView Position="{Binding CarouselPosition}">
<!-- whatever to display in the CarouselView -->
</form:CarouselView>
</ContentPage.Content>
</ContentPage>
在您的viewmodel中,您可以通过以下方式实现导航:
class MyPageViewModel : BindableBase
{
public MyPageViewModel()
{
ShowPrevCommand = new Command(ShowPrev);
ShowNextCommand = new Command(ShowNext);
}
public ICommand ShowPrevCommand { get; private set;}
public ICommand ShowNextCommand { get; private set;}
void OnShowPrev()
{
CarouselPosition--;
}
void OnShowNext()
{
CarouselPosition++;
}
public int CarouselPosition
{
get => _carouselPosition;
set
{
if(value == _carouselPosition)
{
return;
}
this._carouselPosition = value;
PropertyChanges?.Invoke(this, new PropertyChangedEventArgs(CarouselPosition));
}
}
}
只是为了获得要点。当然,您必须处理溢出等情况(即CarouselPosition
超过轮播中的视图数量等)