如何在Xamarin表单的文本字段中显示数据库中注册的数据以进行更新

如何在Xamarin表单的文本字段中显示数据库中注册的数据以进行更新,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我想更新/编辑我的Xamarin表单应用程序中的播放器详细信息。玩家登录到应用程序后,点击配置文件图像应导航至玩家详细信息(Register.xaml)屏幕,并从数据库填充player Details)。如何在文本字段中显示数据 //Register.xaml: <ContentPage.Content> <StackLayout Spacing="20" Padding="20"> <Label Tex

我想
更新/编辑我的Xamarin表单应用程序中的播放器详细信息。玩家登录到应用程序后,点击配置文件图像应导航至玩家详细信息(
Register.xaml
)屏幕,并从数据库填充
player Details
)。如何在文本字段中显示数据

//Register.xaml:

<ContentPage.Content>
        <StackLayout Spacing="20" Padding="20">           
            <Label Text="Player Details" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" FontSize="25"></Label>
            <Entry x:Name="fullNameEntry" Placeholder="Full Name" Text="{Binding FullName}"></Entry>
            <Entry x:Name="mobileEntry" Placeholder="Mobile" Text="{Binding Mobile}"></Entry>
            <Entry x:Name="soccerpostionEntry" Placeholder="Soccer Position" Text="{Binding SoccerPosition}"></Entry>            
            <Button Text="Register"  Clicked="RegisterSave_OnClicked" TextColor="White" BackgroundColor="ForestGreen"></Button>
        </StackLayout>
    </ContentPage.Content>
PlayerDetails模型类:

string fullname;
        string mobile;
        string soccerposition;

        public PlayerDetails()
        {

        }

        public string FullName
        {
            set
            {
                if (fullname != value)
                {
                    fullname = value;

                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("FullName"));
                    }
                }
            }
            get
            {
                return fullname;
            }
        }

        public string Mobile
        {
            set
            {
                if (mobile != value)
                {
                    mobile = value;

                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Mobile"));
                    }
                }
            }
            get
            {
                return mobile;
            }

        }

        public string SoccerPosition
        {
            set
            {
                if (soccerposition != value)
                {
                    soccerposition = value;

                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("SoccerPosition"));
                    }
                }
            }
            get
            {
                return soccerposition;
            }
        }

解决方案:

当您按下“注册”页面时,您应该
传递模型

在注册页面中,在构造函数中添加
PlayerDetails
参数,并将
BindingContext
设置到模型:

public partial class Register : ContentPage
{
    PlayerDetails myDetails;

    public Register(PlayerDetails playD)
    {
        InitializeComponent ();

        myDetails = playD;
        BindingContext = myDetails;
    }
}
当你推的时候,通过模型:

private async void OnProfilePicClicked(object sender, EventArgs e)
{
    //Navigate to Register screen with player data loaded:
    var emailText = emailEntry.Text;
    List<PlayerDetails> details = (from x in conn.Table<PlayerDetails>() where x.Email == emailText select x).ToList();
    if (details != null)
    {
        // found the record
        PlayerDetails playerDetails = new PlayerDetails();
        playerDetails.FullName = details[0].FullName;
        playerDetails.Mobile = details[0].Mobile;
        playerDetails.SoccerPosition = details[0].SoccerPosition;


        await Navigation.PushAsync(new Register(playerDetails) { });
    }
    else {

        Console.WriteLine("Can't find the playerDetails");
    }
}
private async void OnProfilePicClicked(对象发送方,事件参数e)
{
//导航至已加载播放器数据的注册屏幕:
var emailText=emailEntry.Text;
列表详细信息=(从conn.Table()中的x开始,其中x.Email==emailText选择x.ToList();
如果(详细信息!=null)
{
//找到记录了吗
PlayerDetails PlayerDetails=新的PlayerDetails();
playerDetails.FullName=详细信息[0]。FullName;
playerDetails.Mobile=详细信息[0].Mobile;
playerDetails.SoccerPosition=详细信息[0]。SoccerPosition;
wait Navigation.PushAsync(新寄存器(playerDetails){});
}
否则{
Console.WriteLine(“找不到播放器详细信息”);
}
}

通常,您会将数据加载到模型中,并将其绑定到页面上的控件。关于如何做到这一点,有很多文章和示例应用程序。你具体不明白什么?将特定玩家的数据传递到新页面并显示它。我正在努力从数据库中获取特定玩家的数据并传递回模型视图。对不起,我对Xamarin表单很陌生。。我可以通过玩家电子邮件获取数据吗?“我可以通过电子邮件获取玩家数据吗?”-你的意思是你可以通过他们的电子邮件地址在数据库中查找玩家吗?可能吧-但是您还没有向我们展示您的数据模型或数据库的任何相关代码。首先,在执行db查询之前,您正在推送新页面。其次,您实际上没有向新页面传递任何数据@JackHua MSFT下面的答案解决了这两个问题。太棒了,这正在起作用,我们是否可以在导航到PlayerDetails后,将
注册
按钮上的标签更改为
更新
?@soccerway当然可以,像在标签上一样绑定按钮的文本。Hua。。。你能帮我解决这个问题吗。所有我需要显示的数据SoccerDailyStatus.xaml..但现在屏幕闪烁异常…华,我用另一种方式解决了这个问题,非常感谢与我再次检查
private async void OnProfilePicClicked(object sender, EventArgs e)
{
    //Navigate to Register screen with player data loaded:
    var emailText = emailEntry.Text;
    List<PlayerDetails> details = (from x in conn.Table<PlayerDetails>() where x.Email == emailText select x).ToList();
    if (details != null)
    {
        // found the record
        PlayerDetails playerDetails = new PlayerDetails();
        playerDetails.FullName = details[0].FullName;
        playerDetails.Mobile = details[0].Mobile;
        playerDetails.SoccerPosition = details[0].SoccerPosition;


        await Navigation.PushAsync(new Register(playerDetails) { });
    }
    else {

        Console.WriteLine("Can't find the playerDetails");
    }
}