Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.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
Xamarin.forms 使用Prism导航到旋转视图内的视图_Xamarin.forms_Prism - Fatal编程技术网

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));
        }
    }

}