Ich versuche derzeit, einseitige Datenbindung in einer Listview zu machen, so dass beim Starten meiner Anwendung eine Methode geöffnet wird, nach eingehenden Paketen gesucht wird, eine Liste gefüllt wird und binden Sie diese Liste an eine Listenansicht, die dann jedes Paket mit seinen Informationen anzeigt. Aus irgendeinem Grund füllt das ListView jedoch nicht wirklich auf. Ich habe debugged, und der gesamte Backend-Code funktioniert einwandfrei - die lokalen Variablen, wie die Paketmodelle und die Liste der Modelle, füllen sich perfekt. Das ListView enthält jedoch keinen Inhalt, und wenn ich auf die lokale Variable schaue, wird jedes Inhaltselement als vollständig leer angezeigt.UWP - Bindende Daten funktionieren nicht - Leere ListView
Hier ist mein Code:
DeliveryPlannerData.cs
public static List<ShipmentModel> shipments { get; set; } = new List<ShipmentModel>();
public async static void populateDeliveryPlanner(string startDate, string endDate)
{
var deliveryPlanner = await DeliveryPlanner.DeliveryPlannerRequest(startDate, endDate);
//if (panel.Children.Count > 0)
// panel.Children.Clear();
try
{
List<string> trackingNumber = deliveryPlanner["trackingNumber"];
List<string> lastScanDate = deliveryPlanner["lastScanDate"];
List<string> scheduledDelivery = deliveryPlanner["scheduledDelivery"];
List<string> status = deliveryPlanner["status"];
for (int i = 0; i < trackingNumber.Count; i++)
{
shipments.Add(new ShipmentModel(
trackingNumber[i], lastScanDate[i], scheduledDelivery[i], getStatus(status[i])
));
var v = shipments;
}
}
catch (NullReferenceException e)
{
var error = e;
}
} // populateDeliveryPlanner
ShipmentModel.cs
public class ShipmentModel : INotifyPropertyChanged
{
public string TrackingNumber;
public string LastScanDate;
public string ScheduledDelivery;
public string Status;
public event PropertyChangedEventHandler PropertyChanged = delegate { };
public ShipmentModel(string trackingNumber, string lastScanDate, string scheduledDelivery, string status)
{
TrackingNumber = trackingNumber;
LastScanDate = lastScanDate;
ScheduledDelivery = scheduledDelivery;
Status = status;
}
public string trackingNumber
{
get { return this.TrackingNumber; }
set
{
this.TrackingNumber = value;
this.OnPropertyChanged();
}
}
DeliveryPlanner.xaml
<ListView x:Name="listView" ItemTemplate="{StaticResource ShipmentModelTemplate1}" ItemsSource="{Binding shipments, Mode=OneWay}" Margin="19,12,19,0" Grid.Row="1" VerticalAlignment="Bottom"/>
Dies ist offensichtlich nicht der gesamte Code in jedem Dokument, aber es sind die wichtigen Teile. Ich frage mich, was ich falsch mache? Die listView verweigert das Auffüllen.
Versuchen Sie, 'shipments' ein [ObservableCollection] (https://msdn.microsoft.com/en-us /library/ms668604(v=vs.110).aspx) –
Hey, danke! Das hat perfekt funktioniert. Wenn es Ihnen nichts ausmacht, können Sie mir erklären, warum das Wechseln von List <> zu ObservableCollection <> funktioniert? – msiegs
Ja, Sie brauchen ObservableCollection. Sehen Sie den Unterschied hier. http://stackoverflow.com/a/4197068/4585476 – AVK