轻按“物品”后,导航到模型上定义的特定页面

时间:2019-09-26 21:22:26

标签: events xamarin.forms model navigation

我正在尝试创建一个自定义主页,其中页面在水平滚动视图中被列为“服务”,因此每个页面都应导航到不同的页面。

我有这样的看法:

           <controls:HorizontalScrollView HeightRequest="160" 
                                   Orientation="Horizontal"  
                                   ItemsSource="{Binding OwnerServicesList}"
                                   x:Name="OwnerServicesSlider"
                                   ItemSelected="OwnerServicesSlider_ItemSelected">

                <controls:HorizontalScrollView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Margin="10,0,5,0" WidthRequest="100" HeightRequest="100">
                                <Image HorizontalOptions="Start"  Source="{Binding ImgUrl}" WidthRequest="100" HeightRequest="100" />
                                <Label Style="{StaticResource BoldLabel}" HorizontalTextAlignment="Center" FontSize="13" LineBreakMode="TailTruncation" Text="{Binding Name}" TextColor="Black"/>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>

我在为水平滚动视图(类似于列表视图)使用定制控制器时,轻按的每个项目都会引发 ItemTappedEventArgs事件。

在模型内部,我为滚动视图中的每个对象声明了public Page Page { get; set; }

我想做的是恢复被点击的元素并恢复存储在其中的Page,以便我可以导航到该特定页面。

到目前为止,我有这样的事情:

private void OwnerServicesSlider_ItemSelected(object sender, ItemTappedEventArgs e)
        {
            var service = OwnerServicesSlider.SelectedItem as Services;   
            Navigation.PushAsync(service.Page);
        }

它没有显示错误,但是运行时我得到了

  

InvalidOperationException:'页面必须没有父项。

任何提示将不胜感激!

1 个答案:

答案 0 :(得分:0)

正如Jason所说,可能在当前导航结构中存在您要推送的页面,在您推送页面之前,有一种解决方法:

/* 1 */
{
    "_id" : ObjectId("5d93fa1a5261dfb4940f166f"),
    "hash" : "1",
    "block_number" : 1.0,
    "transfers" : [ 
        {
            "symbol" : "bob",
            "from" : "yh",
            "to" : "sh",
            "amount" : 12321.0
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("5d93fead5261dfb4940f1672"),
    "hash" : "3",
    "block_number" : 3.0,
    "transfers" : [ 
        {
            "symbol" : "bob",
            "from" : "yh",
            "to" : "sh",
            "amount" : 444.0
        }
    ]
}