Xamarin传递参数非法网页

问题描述 投票:1回答:1

我试图打开水龙头时,应显示特定对象的一些详细信息的新Page。对于工作,我需要的对象本身或者它的ID传递给新的一页。所以我增加了一个参数如下详细页面的构造函数。

void onItemTapped(object sender, ItemTappedEventArgs e)
{
    if (e.Item != null)
    {
        bool convOk = Int32.TryParse((string)e.Item, out int id);
        if (convOk)
        {
            Navigation.PushAsync(new DetailPage(id));
        }
    }
}

DetailPage都有自己的DetailViewModel,被设置为隐藏代码中的BindingContext

DetailPage XAML:

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             x:Class="Foo.Views.DetailPage">
    <ContentPage.Content>
        <StackLayout Orientation="Vertical">
            <Label Text="FooBar" />
            <Label Text="{Binding trackID}" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

DetailPage代码隐藏

namespace Foo.Views
{
    public partial class DetailPage : ContentPage
    {
        public DetailPage(int trackID)
        {
            InitializeComponent();

            BindingContext = new DetailViewModel(trackID);
        }
    }
}

DetailViewModel

namespace Foo.ViewModels
{
    public class DetailViewModel : BaseViewModel
    {
        // trackID prop
        int _trackID;
        int trackID 
        { 
            get { return _trackID; }
            set 
            { 
                _trackID = value;
                notifyPropertyChanged(nameof(trackID));
            } 
        }

        public TargetDetailViewModel(int tid)
        {
            trackID = tid;
        }
    }
}

然而,DetailPageDetailViewModel之间的结合似乎并没有正常工作,页面不显示任何东西。该ID本身是正确传递一路下跌到DetailViewModel

这是由于初始化的顺序?我相信一切都写在XAML将在DetailPage.InitializeComponent()方法来执行?如果这是正确的,它是安全/正确的实例化ViewModelDetailPage.InitializeComponent()

任何提示赞赏。

c# ios xamarin xamarin.forms xamarin.ios
1个回答
1
投票

trackID财产不公开。

注意:如果你看应用程序日志输出,您可以赶上结合的问题,像这样(由字符串Binding:筛选它)

Log example of a private variable not being bound:

Binding: 'trackID' property not found on 'XXXX.VM', target property: 'Xamarin.Forms.Label.Text'

DetailViewModel Fix:

public class DetailViewModel : BaseViewModel
{
    int _trackID;
    public int trackID;
    { 
        get { return _trackID; }
        set 
        { 
            _trackID = value;
            notifyPropertyChanged(nameof(trackID));
        } 
    }
    ~~~~
 }
© www.soinside.com 2019 - 2024. All rights reserved.