Почему моя привязка в .NET Maui не работает?C#

Место общения программистов C#
Ответить
Anonymous
 Почему моя привязка в .NET Maui не работает?

Сообщение Anonymous »

Я работаю над приложением .NET MAUI, которое управляет участниками и членством. Я могу выполнять операции CRUD над участниками (добавлять, удалять, просматривать и обновлять), а также управлять членством (создавать, удалять, просматривать). Однако я столкнулся с проблемой при попытке добавить членство к участнику. Проблема возникает, когда я ввожу данные участника и ожидаю увидеть список связанных с ним членств, но членство не отображается.
Я проверил, что ошибок привязки XAML нет, и есть нет ошибок привязки в приложении. Кажется, с точки зрения привязки все в порядке, но список участников не отображается должным образом после перехода к сведениям об участнике.
Ожидаемое поведение:
Когда я выбираю участника, я ожидаю, что будет отображен список участников, связанных с этим участником.
Фактическое поведение:
Список участников не отображается, хотя Я могу создавать, обновлять и удалять членство для участника. Однако после выбора участника членство в списке не отображается.
Что я пробовал:
  • Я проверил XAML на наличие проблем с привязкой, сбоев привязки нет.
  • Я убедился, что данные правильно извлекаются из базы данных для членства и участников.
  • Я рассмотрел код, настраивающий BindingContext для обоих членов. и членство.
  • Я подтвердил, что операции базы данных по сохранению и извлечению членства работают правильно.
  • Членство правильно сохраняется и извлекается , но ListView не обновляет и не отображает список членства для выбранного члена.
Я не буду помещать класс модели или член xaml и xaml.cs, поскольку я считаю их правильными, поэтому я буду помещать только представление списка и членство в файлах xaml и xaml.cs. Первый — listpage.xaml
using SQLite;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SQLiteNetExtensions.Attributes;

'This is the ListPage.xaml the page that doesn't work'































I will put the ListPage.xaml.cs
using YourAppNamespace.Models;

namespace YourAppNamespace;

public partial class ListPage : ContentPage
{
public ListPage(Member member = null)
{
InitializeComponent();
BindingContext = member ?? new Member();
}

async void OnSaveButtonClicked(object sender, EventArgs e)
{
var member = (Member)BindingContext;
if (string.IsNullOrWhiteSpace(member.FirstName) || string.IsNullOrWhiteSpace(member.LastName))
{
await DisplayAlert("Error", "First and Last name are required", "OK");
return;
}
await App.Database.SaveMemberAsync(member);
await Navigation.PopAsync();
}

async void OnDeleteButtonClicked(object sender, EventArgs e)
{
var member = (Member)BindingContext;
await App.Database.DeleteMemberAsync(member);
await Navigation.PopAsync();
}

async void OnChooseButtonClicked(object sender, EventArgs e)
{
var member = BindingContext as Member;
if (member != null)
{
var membershipPage = new MembershipPage(new Membership());
await Navigation.PushAsync(membershipPage);
membershipPage.Disappearing += async (s, args) =>
{
if (membershipPage.SelectedMembership != null)
{
member.MembershipID = membershipPage.SelectedMembership.ID;
await App.Database.SaveMemberAsync(member);
var membership = await App.Database.GetMemberMembershipsAsync(member.MembershipID);
await DisplayAlert("Success", "Membership has been associated with the member.", "OK");
}
};
}
else
{
await DisplayAlert("Error", "BindingContext is not set as Member.", "OK");
}
}

protected override async void OnAppearing()
{
base.OnAppearing();
if (BindingContext is Member member)
{
listView.ItemsSource = await App.Database.GetMemberMembershipsAsync(member.ID);
}
else
{
await DisplayAlert("Error", "BindingContext is not set to a Member.", "OK");
}
}
}

This is the MembershipPage.xaml.cs
using YourAppNamespace.Models;

namespace YourAppNamespace;

public partial class MembershipPage : ContentPage
{
public Membership SelectedMembership { get; set; }

public MembershipPage(Membership membership = null)
{
InitializeComponent();
BindingContext = membership ?? new Membership();
}

async void OnSaveButtonClicked(object sender, EventArgs e)
{
if (BindingContext is Membership membership)
{
await App.Database.SaveMembershipAsync(membership);
listView.ItemsSource = await App.Database.GetMembershipsAsync();
}
else
{
await DisplayAlert("Error", "BindingContext is not set to a Membership.", "OK");
}
}

async void OnDeleteButtonClicked(object sender, EventArgs e)
{
var membership = listView.SelectedItem as Membership;
await App.Database.DeleteMembershipAsync(membership);
listView.ItemsSource = await App.Database.GetMembershipsAsync();
}

protected override async void OnAppearing()
{
base.OnAppearing();
listView.ItemsSource = await App.Database.GetMembershipsAsync();
}

async void OnAddButtonClicked(object sender, EventArgs e)
{
if (listView.SelectedItem is Membership selectedMembership)
{
var member = new Member();
await App.Database.SaveMemberAsync(member);

selectedMembership.Members ??= new List();
selectedMembership.Members.Add(member);

await DisplayAlert("Success", "Member added successfully", "OK");
await Navigation.PopAsync();
}
else
{
await DisplayAlert("Error", "Please select a membership before adding a member.", "OK");
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... s-not-work
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»