如何在代码隐藏中获取DataModel字段的值,而不使用MAUI C#中Xaml页面上的Entry控件?

im9ewurl  于 2023-05-27  发布在  C#
关注(0)|答案(1)|浏览(133)

我是C#和MAUI的新手-所以谢谢你的帮助!

我拥有:

我已经创建了一个非常简单的2页应用程序,工作得很好:
1.第1页使用CollectionView显示MyDataModel定义的名字列表(FirstName,LastName,ID)。如果用户在列表中选择了一个项,则程序将导航到该项的详细信息页。
1.第2页使用{Binding}填充<Entry />控件,显示所选项目的名字和姓氏,以及提交按钮,以提交对我的数据库的任何更改。我不想使用<Entry />向用户显示ID字段。

我需要:

在我的详细信息页面:如果没有<Entry />,如何引用MyDataModel的ID值?
例如:

MyDataModel MyRecord = new MyDataModel();
MyRecord.FirstName = FirstNameEntry.Text;   // Value from Xaml Entry
MyRecord.LastName = LastNameEntry.Text;     // Value from Xaml Entry
MyRecord.ID = __________;                   // How do I get this value without an Xaml Entry?

详细代码如下。

数据模型

简单的数据模型,每条记录3个字段

public class MyDataModel
    {
        [PrimaryKey, AutoIncrement]
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

集合视图页面代码隐藏

集合视图选择已更改

private async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (e.CurrentSelection.FirstOrDefault() != null)
        {
            MyDataModel MySelectedItem = e.CurrentSelection.FirstOrDefault() as MyDataModel;
            await Navigation.PushAsync(new DetailPage
            {
                BindingContext = MySelectedItem 
            });
        }
    }

详情页Xaml

Xaml中详细信息页上的<Entry />字段

<Entry 
    x:Name="FirstNameEntry"
    Text="{Binding FirstName}" />

<Entry 
    x:Name="LastNameEntry"
    Text="{Binding LastName}" />

详情页后台代码

如果没有Xaml <Entry />,如何访问该记录的ID值?

public DetailPage()
    {
        InitializeComponent();
        BindingContext = this;
    }

private async void Submit_Button_Clicked(object sender, EventArgs e)
    {
        MyDataModel MyRecord = new MyDataModel();
        MyRecord.FirstName = FirstNameEntry.Text;
        MyRecord.LastName = LastNameEntry.Text;
        MyRecord.ID = ___How Do I Get ID Without Using an XAML Entry?___;   // int.Parse(IdEntry.Text);
        await SaveRecord(MyRecord);
    }

谢谢你

5w9g7ksd

5w9g7ksd1#

通过构造函数传递模型

await Navigation.PushAsync(new DetailPage(MySelectedItem));

然后在DetailPage

private MyDataModel model;

public DetailPage(MyDataModel data)
{
    InitializeComponent();
    
    BindingContext = model = data;
}

private async void Submit_Button_Clicked(object sender, EventArgs e)
{
   // you are using data binding, so you do not
   // explicitly need to set any property values
   await SaveRecord(model);
}

相关问题