Xamarin.forms 使用Prism导航到旋转视图内的视图
我有一个Xamarin.forms 使用Prism导航到旋转视图内的视图,xamarin.forms,prism,Xamarin.forms,Prism,我有一个MyPage,上面有一个CarouselView,下面有两个按钮。这些按钮用于在CarouselView内的ContentView视图之间导航: [CarouselView] [Prev] [Next] ContentViewA和ContentViewB位于CarouselView MyPageViewModel具有用于上一个和下一个按钮的命令: class MyPageViewModel : BindableBase { public ICommand ShowPrevCo
MyPage
,上面有一个CarouselView
,下面有两个按钮。这些按钮用于在CarouselView
内的ContentView
视图之间导航:
[CarouselView]
[Prev] [Next]
ContentViewA
和ContentViewB
位于CarouselView
MyPageViewModel
具有用于上一个和下一个按钮的命令:
class MyPageViewModel : BindableBase
{
public ICommand ShowPrevCommand { get; private set;}
public ICommand ShowNextCommand { get; private set;}
}
如何实现命令以使旋转视图显示视图
根据文件
在Prism中,导航到一个视图或导航到另一个视图的概念
ViewModel不存在。相反,您只需导航到
体验,或表示目标视图的唯一标识符
您希望在应用程序中导航到
所以我想我可以使用INavigationService。
我在想我可以实现自己的NavigationService
,在NavigateAsync
上,我可以检查当前页面是否为MyPage
。如果是,我可以根据导航名称参数将CarouselView
中的视图设置为视图
然而,我不知道如何实现和覆盖Prism的导航服务
Prism for Xamarin表单可以做这样的事情吗?它不必那么复杂
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>
只是想了解要点。当然,您必须处理诸如溢出(即
CarouselPosition
超出了carousel中的视图数)等情况。谢谢!你说得对,这肯定行。但是像这样使用Position
属性会使视图模型看起来更像视图后面的代码,而不是视图模型。也许你是对的,我可能想得太多了,不太确定。。。我在寻找更多的想法。。。改用NavigationService会让它更加灵活。但我知道这种灵活性是有代价的(我需要自己实现它,因为Prism目前不支持这种CarouseView场景),其次,我真的需要它吗?
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));
}
}
}