Как мне изменить значение параметра DetailPage на, чтобы он фактически открывал выбранную страницу, а не просто пустую страницу?

#c# #listview #xamarin

#c# #listview #xamarin

Вопрос:

Я пытаюсь заставить эту страницу поиска в моем приложении работать должным образом. Прямо сейчас он хорошо просматривает ListView, но ListView не ссылается на другие страницы в приложении. Вместо этого, при нажатии на каждый элемент ListView открывается просто пустая страница. Я думаю, что допустил ошибку в том, как я структурирую класс DetailPage, но я не уверен, как это исправить.

Это код для Search.cs.

Это сообщение на форуме Xamarin, где я обсуждал эту проблему. Кто-то помог мне, и они были очень полезны до сих пор.

Я искал ответы в MSDN, но пока не смог разобраться. Как мне изменить значение параметра DetailPage на, чтобы он фактически открывал выбранную страницу, а не просто пустую страницу?

Это класс DetailPage .

 class DetailPage : ContentPage
{                
    public DetailPage(pageList page_list)
    {
        this.page_list = page_list;
    }       

    public pageList page_list { private set; get; }

}
  

Именно здесь объект DetailPage detailPage получает свой параметр ItemSelected . Он просто открывает пустую страницу, а это не то, что я хочу.

         listView.ItemTapped  = async (sender, args) =>
         {

             var itemSelected = args.Item as pageList;
             if (itemSelected != null)
             {
                 DetailPage detailPage = new DetailPage(itemSelected);
                 await Navigation.PushAsync(detailPage, true);                                     

             }

         };
  

Комментарии:

1. фрагмент кода, который вы опубликовали для своей страницы DetailPage, не показывает никакого содержимого, поэтому он, естественно, будет отображаться как пустая страница. Есть ли еще код (или XAML), который вы не показали?

2. В сути GitHub , которую я опубликовал, страница сведений принимает параметр, который должен ссылаться на другие существующие страницы в приложении. Объект pageListings содержит ссылки на другие страницы.

3. в DetailPage нет кода, который действительно что-то делает с этим параметром

4. что такое Anaphylaxis (и другие элементы в pagelist)? Являются ли они страницами содержимого?

5. Вы правы в том, что ничего не делаете с этим параметром. Да, это ContentPages. Я думаю, что ошибка, которую я допустил, заключалась в том, что я никогда не привязывал свойство fileName к ListView, поэтому он просто показывает заголовок страницы PageList без ссылки fileName на другую страницу содержимого. Я не могу понять, как правильно ее привязать сейчас.

Ответ №1:

поскольку вы знаете тип страницы, вы можете использовать Activator .CreateInstance для ее создания

          var itemSelected = args.Item as pageList;
         if (itemSelected != null)
         {
             var page = (ContentPage) System.Activator.CreateInstance(itemSelected.fileName);
             await Navigation.PushAsync(page, true);                                     
         }
  

Комментарии:

1. Для навигации await. PushAsync(страница, true); сообщение об ошибке является аргументом 1: невозможно преобразовать из ‘object’ в ‘Xamarin. Формы. Страница ‘. Я не уверен, как это исправить.

2. Большое спасибо, Джейсон. Я помещал приведение не с той стороны. Теперь все работает правильно. Я отдам должное вашему решению здесь, на reddit и на форумах Xamarin.