C# UWP-绑定数据不工作-空ListView
我目前正在尝试在listview内部进行单向数据绑定,这样当我的应用程序启动时,它将打开一个方法,检查传入的包,填充一个列表,并将该列表绑定到一个listview,该listview将显示每个包及其信息。然而,由于某些原因,ListView实际上并没有被填充。我已经调试过了,所有的后端代码都运行良好——本地变量,比如包模型和模型列表,都可以完美地填充。但是,ListView不包含任何内容,当我查看局部变量时,它会将每个内容片段显示为完全空的 这是我的密码: DeliveryPlannerData.csC# UWP-绑定数据不工作-空ListView,c#,listview,data-binding,uwp,uwp-xaml,C#,Listview,Data Binding,Uwp,Uwp Xaml,我目前正在尝试在listview内部进行单向数据绑定,这样当我的应用程序启动时,它将打开一个方法,检查传入的包,填充一个列表,并将该列表绑定到一个listview,该listview将显示每个包及其信息。然而,由于某些原因,ListView实际上并没有被填充。我已经调试过了,所有的后端代码都运行良好——本地变量,比如包模型和模型列表,都可以完美地填充。但是,ListView不包含任何内容,当我查看局部变量时,它会将每个内容片段显示为完全空的 这是我的密码: DeliveryPlannerData
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
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拒绝填充。正如您根据上面的注释所注意到的,您需要使用
ObservableCollection
,以使其正常工作。但原因有点模糊
设置视图的DataContext
属性时,视图将转到绑定属性并绑定它们,一旦。。。因此,如果在初始化DataContext
时,您的集合中没有任何内容,那么您将无法在视图中获得任何内容
为了解决这个问题,我们实现了名为INotifyPropertyChanged
的接口。我们在ViewModels和Models上使用此选项
这个接口的作用是为您提供一个事件处理程序,您可以使用它来更新UI。您在事件中发送属性名称,当UI处理它时,它捕获属性名称,检查是否有任何内容绑定到该属性,如果有,则跳出并用新值更新它
这里是可观察收集
发挥作用的地方。您的observateCollection
将为您更新UI
,这样您就不需要调用属性更改事件
从中可以看到,它实现了INotifyPropertyChanged
[SerializableAttribute]
public class ObservableCollection<T> : Collection<T>, INotifyCollectionChanged,
INotifyPropertyChanged
[SerializableAttribute]
公共类ObservableCollection:Collection,INotifyCollectionChanged,
InotifyProperty已更改
如果在将项目添加到列表中后调用属性更改事件,则也不需要ObservableCollection
这是一个
这是你的电话号码
这里是一个尝试制作
发货
一个嘿,谢谢!这非常有效。如果您不介意的话,您能解释一下为什么从列表更改为ObservableCollection会起作用吗?是的,您需要ObservableCollection。看到这里的区别了吗。