Warum funktioniert meine Bindung in .NET Maui nicht?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Warum funktioniert meine Bindung in .NET Maui nicht?

Post by Guest »

1Ich arbeite an einer .NET MAUI-Anwendung, die Mitglieder und Mitgliedschaften verwaltet. Ich kann CRUD-Vorgänge für Mitglieder durchführen (Hinzufügen, Löschen, Anzeigen und Aktualisieren) und gleichermaßen auch Mitgliedschaften verwalten (Erstellen, Löschen, Anzeigen). Beim Versuch, einem Mitglied eine Mitgliedschaft hinzuzufügen, tritt jedoch ein Problem auf. Das Problem tritt auf, wenn ich die Details eines Mitglieds eingebe und erwarte, dass eine Liste der zugehörigen Mitgliedschaften angezeigt wird, aber keine Mitgliedschaften angezeigt werden.
Erwartetes Verhalten:
Wenn ich ein Mitglied auswähle, erwarte ich, dass die Liste der mit diesem Mitglied verknüpften Mitgliedschaften angezeigt wird.
Tatsächliches Verhalten:
Die Mitgliederliste wird nicht angezeigt, obwohl ich es bin in der Lage, Mitgliedschaften für zu erstellen, zu aktualisieren und zu löschen Mitglied. Nach der Auswahl eines Mitglieds werden jedoch keine Mitgliedschaften in der Liste angezeigt.
Ich habe einige Nachforschungen angestellt, als ich versuchte, die GetMemberMembershipsAsync-Methode zu debuggen. Der Zählwert wird als 0 angezeigt. Dies zeigt an, dass keine Daten aus der Datenbank abgerufen werden, obwohl ich erwarte, dass Ergebnisse zurückgegeben werden. Es werden also keine Mitgliedschaften erstellt.
Das ist die Methode, die nicht funktioniert:

Code: Select all

````
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);

}
````
Ich werde die ListPage.xaml.cs einfügen

Code: Select all

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");
}
}

}

































Ich habe am Ende des Beitrags einen Link zum Fehlerbild eingefügt, da ich bei Stack Overflow nicht den Ruf von 10 habe. Wie im Bild gezeigt, erscheint der Abonnementname nicht in der Liste „Mitgliedschaften“, was darauf hinweist, dass der Vorgang nicht erfolgreich ausgeführt wurde. Trotz verschiedener Ansätze, wie z. B. der Sicherstellung der korrekten Beziehungen zwischen den Objekten „Member“ und „Membership“, besteht das Problem weiterhin. Dies lässt mich vermuten, dass der MembershipName nicht korrekt abgerufen oder angezeigt wird. Ich bin mir nicht sicher, was ich sonst noch versuchen soll oder wie ich dieses Problem effektiv beheben kann.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post