В настоящее время я пытаюсь выполнить одностороннюю привязку данных внутри списка, так что, когда мое приложение запустится, оно откроет метод, проверит наличие входящих пакетов, заполнит список , и привяжите этот список к списку, который затем покажет каждый пакет с его информацией. По какой-то причине, однако, ListView фактически не заполняется. Я отлаживал, и весь внутренний код работает нормально - локальные переменные, такие как модели пакетов и список моделей, все заполняются отлично. Однако ListView не содержит никакого содержимого, и когда я смотрю на локальную переменную, он показывает каждую часть контента как полностью пустую.UWP - данные привязки не работают - Empty ListView
Вот мой код:
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"/>
Это, очевидно, не весь код в каждом документе, но это важные детали. Мне интересно, что я делаю неправильно? ListView отказывается заполнять.
попробовать сделать 'shipments' [ObservableCollection] (https://msdn.microsoft.com/en-us /library/ms668604(v=vs.110).aspx) –
Эй, спасибо! Это сработало отлично. Если вы не возражаете, не могли бы вы объяснить, почему переход из списка <> в ObservableCollection <> сделал эту работу? – msiegs
Да, вам нужно ObservableCollection. См. Разницу здесь. http://stackoverflow.com/a/4197068/4585476 – AVK