如何绑定详情页?

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

我是 C# 和 .net MAUI 的新手,在数据绑定方面遇到了一些麻烦。

我有两个页面:

  1. ClassesList 带有 CollectionView 列表
  2. ClassDetails 接收对象以显示详细信息

我使用 SelectionChanged 事件将两者绑定在一起,如下所示:

private async void classesCollection_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.CurrentSelection.Count != 0)
    {
        Class selectedClass = e.CurrentSelection.FirstOrDefault() as Class;
        Debug.WriteLine($"Selected {selectedClass.Title} with {selectedClass.Instructor}");

        var navigationParameters = new Dictionary<string, object> {
            { "class", selectedClass }
        };

        await Shell.Current.GoToAsync("class_details", navigationParameters);

        classesCollection.SelectedItem = null;
    }

}

这完美地工作。它输出

Selected ClassA with Instructor1
然后打开我的ClassDetails页面。


ClassDetails接收到selectedClass对象,用Debug语句输出

Class Details for ClassA with Instuctor1
,完美

[QueryProperty(nameof(SelectedClass), "class")]
public partial class ClassDetails : ContentPage, IQueryAttributable, INotifyPropertyChanged
{
    public Class SelectedClass { get; private set; }

    public void ApplyQueryAttributes(IDictionary<string, object> query)
    {
        SelectedClass = query["class"] as Class;
        OnPropertyChanged("class");
        Debug.WriteLine($"Class Details for {SelectedClass.Title} with {SelectedClass.Instructor}");
    }

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

}

问题是我的绑定在我的 XAML 页面上不起作用。

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="Sign_In_001.Views.ClassDetails"
             Title="ClassDetails">
    <VerticalStackLayout>
        <Label 
            Text="Class Details"
            VerticalOptions="Center" 
            HorizontalOptions="Center" />
        <Label 
            Text="{Binding Title}"
            VerticalOptions="Center" 
            HorizontalOptions="Center" />
        <Label 
            Text="{Binding Instructor}"
            VerticalOptions="Center" 
            HorizontalOptions="Center" />
    </VerticalStackLayout>
</ContentPage>
  • 首先
    <Label>
    没有数据绑定,所以效果很好。
  • 第二
    <Label>
    显示“课程详细信息”,这是我页面的标题,不是我所期望的.
  • 第三个
    <Label>
    blank并在输出日志中产生这个警告:
     Microsoft.Maui.Controls.Xaml.Diagnostics.BindingDiagnostics: Warning: 'Instructor' property not found on 'Sign_In_001.Views.ClassDetails', target property: 'Microsoft.Maui.Controls.Label.Text'

很明显,我无法访问我的 XAML 中的 SelectedClass,但我不确定从这里去哪里。

问题:如何访问 XAML 中我的 SelectedClass 中的数据?

感谢您的任何建议!

c# data-binding
© www.soinside.com 2019 - 2024. All rights reserved.