页面出现时如何填充 C# MAUI 选择器?

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

我正在尝试弄清楚如何在页面出现时加载选择器。

ClassEditPage有Instructor_Picker(如下所示)。我知道填充它的代码可以工作,因为它提供了调试输出(如下所示),但是,我的选择器从未被填充。没有错误,只是一个空白选择器。

您能帮我弄清楚当我的 ClassEditPage 出现时如何填充 Instructor_Picker 吗?


ClassEditPage.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Studio_Sign_In_202307.Pages.ClassEditPage"
             Title="ClassEditPage">

    <StackLayout Padding="20">

        <!--<Label Text="Instructor:" />
        <Entry Text="{Binding cInstructor}" />-->

        <!-- Instructor Picker -->
        <Label Text="Instructor:" />
        <Picker x:Name="Instructor_Picker"
        Title="Select an Instructor"
        ItemsSource="{Binding InstructorsList}" 
        SelectedItem="{Binding SelectedInstructor}" 
        SelectedIndexChanged="Instructor_Picker_SelectedIndexChanged">
            <Picker.ItemDisplayBinding>
                <!-- Display the instructor's full name in the picker -->
                <Binding Path="iFullName" />
            </Picker.ItemDisplayBinding>
        </Picker>

        <Button Text="Submit" Clicked="OnSubmitClicked" />
        <Button Text="Delete" Clicked="OnDeleteClicked" IsVisible="{Binding cID, Converter={StaticResource HasValueConverter}}" />
        <Button Text="Cancel" Clicked="OnCancelClicked" />
        
    </StackLayout>
</ContentPage>

ClassEditPage.xaml.cs

using Studio_Sign_In_202307.Data;
using Studio_Sign_In_202307.Models;
using System.Collections.ObjectModel;
using System.Diagnostics;

namespace Studio_Sign_In_202307.Pages;

public partial class ClassEditPage : ContentPage
{
    private readonly Class selectedClass;
    private readonly bool isNewClass;

    // Property to hold the collection of instructors
    public ObservableCollection<Instructor> InstructorsList { get; set; }

    // Property to hold the selected instructor
    public Instructor SelectedInstructor { get; set; }

    public ClassEditPage(Class selectedClass)
    {
        InitializeComponent();

        // Determine if this is an existing class or a new class
        isNewClass = selectedClass == null;
        this.selectedClass = selectedClass ?? new Class();

        BindingContext = this.selectedClass;

        // Create Connection String
        string connectionString = DatabaseHelper.BuildConnectionString();

        // Set the InstructorsList with the data from the database
        InstructorsList = DatabaseHelper.GetInstructorsAll(connectionString);

        // Debug instructor list <-- This Displays My Instructors
        foreach (Instructor instructor in InstructorsList)
        {
            Debug.WriteLine($"Instructor ID: {instructor.iID}");
            Debug.WriteLine($"Full Name: {instructor.iFullName}");
            Debug.WriteLine($"Email: {instructor.iEmail}");
            Debug.WriteLine("------------------------");
        }

        // Set the selected instructor for the class (if it has one)
        if (selectedClass.iID_Link != 0)
        {
            SelectedInstructor = InstructorsList.FirstOrDefault(i => i.iID == selectedClass.iID_Link);
            Instructor_Picker.SelectedIndex = InstructorsList.IndexOf(SelectedInstructor);
        }
    }

    private void Instructor_Picker_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (Instructor_Picker.SelectedItem is Instructor selectedInstructor)
        {
            SelectedInstructor = selectedInstructor;
        }
    }

    private void OnSubmitClicked(object sender, EventArgs e)
    {
        Debug.WriteLine("SUBMIT");
    // Submit Logic Here
        Navigation.PopModalAsync();
    }

    private void OnDeleteClicked(object sender, EventArgs e)
    {
        Debug.WriteLine("DELETE");
    // Delete Logic Here
        Navigation.PopModalAsync();
    }

    private void OnCancelClicked(object sender, EventArgs e)
    {
        Navigation.PopModalAsync();
    }

}

调试输出

Instructor ID: 44
Full Name: Lori
Email: [email protected]
------------------------
Instructor ID: 38
Full Name: Bret
Email: [email protected]
------------------------
Instructor ID: 56
Full Name: Jessica
Email: [email protected]
------------------------

感谢您的帮助!

c# maui picker
1个回答
0
投票

我需要将“InstructorsList”和“SelectedInstructor”属性直接添加到类模型中,如下所示:

public ObservableCollection<Instructor> InstructorsList { get; set; }
public Instructor SelectedInstructor { get; set; }

我在 ClassEditPage.xaml.cs 中消除了这两个本地初始化:

public ObservableCollection<Instructor> InstructorsList { get; set; }
public Instructor SelectedInstructor { get; set; }

然后我将它们填充到 ClassEditPage 构造函数中,如下所示:

this.selectedClass.InstructorsList = new ObservableCollection<Instructor>(DatabaseHelper.GetInstructorsAll(connectionString));

...

this.selectedClass.SelectedInstructor = this.selectedClass.InstructorsList.FirstOrDefault(i => i.iID == selectedClass.iID_Link);
© www.soinside.com 2019 - 2024. All rights reserved.