Как перенести данные между страницами? - PullRequest
0 голосов
/ 18 мая 2018

Я знаю, что этот вопрос задавался, но моя ситуация немного отличается.Все мои данные сохраняются на странице C # следующим образом:

    public class RestaurantsDataInfo
{
    public string name { get; set; }
    public string picture { get; set; }
    public string openclosetime { get; set; }
    public string state { get; set; }
    public string address { get; set; }
}
public class RestaurantManager
{
    public static List<RestaurantsDataInfo> GetRestaurants()
    {
        var restaurant = new List<RestaurantsDataInfo>();
        restaurant.Add(new RestaurantsDataInfo { name = "Pizzeria", address = "22 - Vo Van Ngan Str", openclosetime = "8 AM to 9 PM", picture = "Assets/Cover7.jpg", state = "Online" });
        restaurant.Add(new RestaurantsDataInfo { name = "BBQ Kings", address = "55 - Vo Van Ngan Str", openclosetime = "8 AM to 10 PM", picture = "Assets/Cover6.jpg", state = "Online" });
        restaurant.Add(new RestaurantsDataInfo { name = "Lotteria", address = "200 - Vo Van Ngan Str", openclosetime = "8 AM to 8:30 PM", picture = "Assets/Cover5.png", state = "Online" });
        restaurant.Add(new RestaurantsDataInfo { name = "KFC", address = "90 - Vo Van Ngan Str", openclosetime = "8 AM to 8 PM", picture = "Assets/Cover4.png", state = "Online" });
        restaurant.Add(new RestaurantsDataInfo { name = "Mugsy Dogs", address = "112 - Linh Trung Str", openclosetime = "8 AM to 8:30 PM", picture = "Assets/Cover9.png", state = "Online" });
        restaurant.Add(new RestaurantsDataInfo { name = "American Hot Dog", address = "04 - Duong So 5 Str", openclosetime = "8 AM to 8:30 PM", picture = "Assets/Cover10.jpg", state = "Online" });
        restaurant.Add(new RestaurantsDataInfo { name = "Burger King", address = "404 - Duong So 6 Str", openclosetime = "24 hours", picture = "Assets/Cover11.png", state = "Online" });
        return restaurant;
    }
}

Вот страница, которая связывает все данные:

            <GridView Grid.Row="1" x:Name="ListOfRestaurant" IsItemClickEnabled="True" ItemClick="ListOfRestaurant_ItemClick" ScrollViewer.IsScrollInertiaEnabled="True" ItemsSource="{x:Bind RES}">
            <GridView.ItemTemplate>
                <DataTemplate x:DataType="data:RestaurantsDataInfo">
                    <StackPanel Width="197" Height="240">
                        <Image x:Name="ResPic" Source="{x:Bind picture}" Stretch="Fill" Height="150" Width="150"/>
                        <TextBlock x:Name="RestaurantName" Text="{x:Bind name}" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Brown"/>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{x:Bind state}" Margin="3" Foreground="Green"/>
                            <TextBlock Text="{x:Bind address}" Margin="3" Foreground="BlueViolet"/>
                        </StackPanel>
                        <TextBlock Text="{x:Bind openclosetime}" HorizontalAlignment="Center" Margin="3" Foreground="Salmon"/>
                    </StackPanel>
                </DataTemplate>
            </GridView.ItemTemplate>
        </GridView>

Вот ее кодовый конец:

        private void ListOfRestaurant_ItemClick(object sender, ItemClickEventArgs e)
    {
        var item = (RestaurantsDataInfo)e.ClickedItem;
        var title = item.name;
        var container = ListOfRestaurant.ContainerFromItem(e.ClickedItem) as GridViewItem;
        if (container != null)
        {
            //find the image
            var root = (FrameworkElement)container.ContentTemplateRoot;
            var image = (UIElement)root.FindName("ResPic");



            //prepare the animation
            ConnectedAnimationService.GetForCurrentView().PrepareToAnimate("Image", image);
        }
        switch (title)
        {
            case "KFC":

                Frame.Navigate(typeof(DetailRestaurant), _storeditem = item.picture);
                break;
        }
    }

Теперь я хочу перейти к «DetailRestaurant» и отправить на эту страницу информацию, которая содержится в RestaurantDataInfo, чтобы на странице сведений могла отображаться вся база контента в том ресторане, на который я нажимаю

1 Ответ

0 голосов
/ 18 мая 2018

Лучшим решением было бы передать "ID" ресторана, для которого вы хотите отобразить данные:

Frame.Navigate(typeof(DetailRestaurant),"KFC");

А теперь на другой странице OnNavigatedTo получите доступ к параметру, а затем к деталям.информация из коллекции static:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    var info = RestaurantManager.GetRestaurants().
        FirstOrDefault( r => r.name == e.Parameter?.ToString());
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...