如何将tappedItem对象发送到下一页?

时间:2019-01-09 08:52:47

标签: c# xaml xamarin xamarin.forms

我有一个页面,其中包含从api获取的新闻条目的列表视图。 此列表视图仅显示标题。 当点击其中一个标题时,它应导航到详细页面以显示被点击的新闻。

我尝试用多种不同的方式发送它,但是我无法使它工作。

这是我最新尝试使用在newsDetail页面上点击的对象。

(PAGE1 WITH ALL NEWS)itemTapped方法->

 public async void goToNews(object sender, ItemTappedEventArgs eventArgs)
    {
        System.Diagnostics.Debug.WriteLine(eventArgs.ToString());
        newsITEM news = eventArgs.Item as newsITEM;

        if (news == null)
            return;

        await Navigation.PushModalAsync(new newsItem(news));
    }

该项目的(详细信息第PAGE2页)处理程序

 public newsItem(newsITEM news)
    {
        InitializeComponent();
        var newsITEM = new newsITEM(Navigation, news);
        System.Diagnostics.Debug.WriteLine(newsITEM._news.title.rendered);
        BindingContext = newsITEM;
    }

我有一个rootObject类,其中充满了第1页上的所有新闻。

然后我有一个newsITEM类,它具有rootObject,这是我试图填充tappedItem然后发送到page2的原因。

它的行为与对象为null相同。 有人可以引导我找到正确的解决方案吗? 我知道这个问题有点令人困惑,但是我希望您能理解这个问题。

先谢谢了。

2 个答案:

答案 0 :(得分:1)

您可以这样做

    void Handle_ItemTapped(object sender, Xamarin.Forms.ItemTappedEventArgs e)
    {
        if(e.Item == null) {
            return;
        }

        var selectedItem = (Model) e.Item; // model
        Navigation.PushAsync(new newsITEM(selectedItem)); // pass the selected whole item from list to DetaiPage 'selectedItem' using constructor
        ((ListView)sender).SelectedItem = null;

    }

并在您的详细信息页面中,它将返回其父页面中的所有点击的项目数据;

public newItemPage(Model item) // get selected listview tap model object using this constructor(Model item)
    {
        InitializeComponent();
        NavigationPage.SetBackButtonTitle(this, "");

        Title = item.first_name;
        this.BindingContext = item; // binding using this 'item' model object and do whatever
    }

答案 1 :(得分:0)

use可以将项目模型发送给下一个类的构造函数。

`@Configuration
public class CXFConfig {
    @Bean
    public ServletRegistrationBean dispatcherServlet() {
      return new ServletRegistrationBean(new CXFServlet(), "/Myservice/*");
    }

    @Bean(name=Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {    
        SpringBus springBus = new SpringBus();
        springBus.getInInterceptors().add(new AppInboundInterceptor());
        springBus.getOutInterceptors().add(new AppOutboundInterceptor());
        return springBus;
    }   
}`

简单地在下一个类中将该模型的参数指定为

private async void EventList_ItemTapped(object sender, ItemTappedEventArgs e)
    {
        var item= e.Item as Model;
        if (item!= null)
        {
            await Navigation.PushAsync(new EventDetail(item));
        }
    }