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

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

Сообщение Anonymous »

1Я работаю над приложением .NET MAUI, которое управляет участниками и членством. Я могу выполнять операции CRUD над участниками (добавлять, удалять, просматривать и обновлять), а также управлять членством (создавать, удалять, просматривать). Однако я столкнулся с проблемой при попытке добавить членство к участнику. Проблема возникает, когда я ввожу данные участника и ожидаю увидеть список связанных с ним членств, но членство не отображается.
Ожидаемое поведение:
Когда я выбираю участника, я ожидаю, что будет отображен список членств, связанный с этим участником.
Фактическое поведение:
Список участников не отображается, хотя я возможность создавать, обновлять и удалять членство для член. Однако после выбора участника членство в списке не отображается.
Я провел небольшое исследование, когда пытался выполнить отладку метода GetMemberMembershipsAsync. значение счетчика отображается как 0. Это указывает на то, что данные из базы данных не извлекаются, хотя я ожидаю, что она вернет результаты. Таким образом, членство не создается.
Этот метод не работает:

Код: Выделить всё

````
public Task GetMemberMembershipsAsync(int memberid)
{

return _database.QueryAsync(
"SELECT membership.ID, membership.MembershipName FROM Membership membership " +
"INNER JOIN Member M ON M.MembershipID = membership.ID " +
"WHERE M.ID = ?", memberid);

}
````
Я помещу ListPage.xaml.cs

Код: Выделить всё

namespace MauiAppBazaSportiva;
using MauiAppBazaSportiva.Models;
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("Eroare", "Numele si prenumele sunt obligatorii", "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);
await DisplayAlert("Succes", "Abonamentul a fost asociat membrului.", "OK");
listView.ItemsSource = await App.Database.GetMemberMembershipsAsync(member.MembershipID);
}
};
}
else
{
await DisplayAlert("Error", "BindingContext nu este setat ca Membru.", "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 nu e setat catre un membru", "OK");
}
}

}
````
````

using MauiAppBazaSportiva.Models;

namespace MauiAppBazaSportiva;

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)
{
Membership m1;
if(listView.SelectedItem is Membership selectedMembership)
{

var member = new Member()
{
};
if(selectedMembership.Members==null)
{
selectedMembership.Members = new List();
}
await App.Database.SaveMemberAsync(member);
selectedMembership.Members ??= new List();
selectedMembership.Members.Add(member);
await DisplayAlert("Succes", "Membru adaugat cu succes","OK");
await Navigation.PopAsync();

}
else
{
await DisplayAlert("Eroare", "Te rog selecteaza un abonament inainte de adaugarea membrului.", "OK");
}
}

}

































Я включил ссылку в конце сообщения на изображение ошибки, потому что у меня нет репутации 10 на Stack Overflow. Как показано на изображении, имя подписки не отображается в списке «Членство», что указывает на то, что операция не выполнена успешно. Несмотря на использование различных подходов, таких как обеспечение правильных связей между объектами Member и Membership, проблема остается. Это наводит меня на мысль, что MembershipName неправильно извлекается или отображается. Я не знаю, что еще можно предпринять или как эффективно устранить эту проблему.

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

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

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

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

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

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