从标签页传递数据时标签不显示文本

label not showing text when passing data from Tabbed Page

我是 Xamarin 的新手...当我想在标签中显示描述时遇到问题。我有一个包含不同项目的列表视图,当用户单击一个项目时,应用程序将移动到一个选项卡式页面,其中有两个主要 windows 一个用于描述,另一个用于意见。这里有一张图表。 photo

我将对象从单击的项目传递到选项卡式页面,然后从中将数据传递给它的子项。这是代码

---> 型号

 public class Item
{
    public String name;
    public String description;
    public Double price;
    public int stock;
    public List<String> opinions;

    public Item(String name, String description ,Double price, int stock, List<String> opinions)
    {
        this.name = name;
        this.description = description;
        this.price = price;
        this.stock = stock;
        this.opinions = opinions;
    }
    public override string ToString()
    {
        return this.name + " " + this.price + " $" + this.stock + " ud";
    }
    
}

---> 单击 listView 中的项目后导航到 TabPage 的事件处理程序。

private async void parent_listView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var item = (Item)e.SelectedItem;
        //await Navigation.PushAsync(new TabPage(new Datos(itemList[e.SelectedItemIndex] ), new Opinions(itemList[e.SelectedItemIndex] )));
        await Navigation.PushAsync(new TabPage(item));
    }

----> 我如何将数据获取到 TabPage 并发送给它的子页面。

 public partial class TabPage : TabbedPage
{
    Item item;
    public TabPage(Item item)
    {
        InitializeComponent();
        this.item = item;
        inichildren(item);


    }

    private void inichildren(Item item)
    {
        
        Datos d = new Datos(item);
        Opinions o = new Opinions(item);
       
    }

}

---> 最后是我感兴趣的拿督class

 public Datos()
    {
        InitializeComponent();
        
        
        
    }

    public Datos(Item i)
    {
        InitializeComponent();

        
        
        lbl_description.Text = i.description.ToString();
        lbl_item_price.Text = i.price.ToString();
    }

一切正常,甚至我添加了一些断点以查看我是否在 Datos class 中收到数据并且所有标签变量似乎都指向正确的数据。但问题是,当我在构造函数中初始化标签时,屏幕上没有数据出现...... 我是 Xamarin 的新手,不知道为什么会这样。非常感谢您的帮助。

如果您想通过构造函数将数据传递给子页面,则需要在代码中设置页面,而不是XAML。

private void inichildren(Item item)
{
    Datos d = new Datos(item);
    Opinions o = new Opinions(item);
   
    // since you are adding the child pages here, remove them from the TabbedPage XAML
    this.Children.Add(d);
    this.Children.Add(o);
}