【问题标题】:Access nested lists in Observable Collection for Binding访问可观察集合中的嵌套列表以进行绑定
【发布时间】:2015-05-19 21:55:15
【问题描述】:

我有响应对象被添加到我的可观察集合中 如下所示的控制器

public void AddRoutes(IRestResponse response)
{
    ScheduleDownloadResponse json =
    JsonConvert.DeserializeObject<ScheduleDownloadResponse(response.Content);

    ScreenController.Instance.route = new
    ObservableCollection<ScheduleRoute>();
    ScreenController.Instance.vehicle = new
    ObservableCollection<Vehicle>();

    ScreenController.Instance.pickups = new
    ObservableCollection<Pickup>();
    ScreenController.Instance.compartment = new
    ObservableCollection<Compartment>();

    foreach (var item in json.Routes)
    {
        Debug.WriteLine(json.Routes);
        ScreenController.Instance.route.Add(item);

        foreach(var vehicle in item.Vehicles)
        {
            ScreenController.Instance.vehicle.Add(vehicle);

            foreach (var compartment in vehicle.Compartments)
            {

                ScreenController.Instance.compartment.Add(compartment);
            }
        }

在 ScheduleRoute 内部是其他响应对象,例如。车辆包含 隔间对象。 Pickup 包含供应商对象。所有回应 对象在自己的可观察集合中

"Routes": [
 {
 "Id": 1,
 "Date": "2015-03-04T00:00:00",
 "Area": "2887",
 "Detail": "",
 "Driver": "",
 "SampleType": "",
 "Schedule": "A",
 "Tag": "",
 "Vehicles": [
  {
    "VehicleId": 22,
     "VehicleRego": "RRK160",
     "Primary": true,
     "Compartments": [
      {
        "Id": "1",
        "Capacity": 8000.0,
        "Product": ""
      }
]
},
"Pickups": [
{
     "Quantity": 6300.0,
     "Id": 1,
    "Vat": 0,
    "Hazards": "",
    "Latitude": "-34.33000000000",
    "Longitude": "-63.29119000000",
    "Message": "",
    "Supplier": {
    "Id": 1134,
    "Name": "GUTIERREZ REMO O. Y RODOLFO S."
 },
"Product": "Milk",
"ProductKey": "2",
 "Ticket": "",
 "EstmatedPickup": "2015-03-04T20:00:00+13:00"
 },

在视图中,我需要显示路线 ID、日期、时间表、区域和 来自 Vehicles 的 VehicleRego 和来自供应商的 Id。

在我的视图模型中,我有一个作为原始副本的计划 从我的屏幕控制器收集

Schedule = new ObservableCollection<ScheduleRoute>();
Schedule = ScreenController.Instance.route;

我正在 Xamarin 和 Xaml 中编写移动 pcl 应用程序,我绑定到 Schedule 并且可以显示所有第一级 scheduleRoute 中的属性,但不知道如何到达 Vehicles.VehicleRego 和 Vehicles.Suppliers.Id

刚接触 C# 我不确定如何从 scheduleRoute 访问嵌套级别或 将 3 个集合对象(ScheduleRoute、Vehicle 和 Supplier)组合到 检索值

有什么建议吗?

【问题讨论】:

标签: c# linq xaml xamarin observablecollection


【解决方案1】:

因为您有CollectionsVehicles,所以您需要选择其中之一。您可以提供Where() 子句,获取First()Last() 结果,或者只是选择。假设您有routepickupvehicle Id

public void GetInfo(Route route, Pickup pickup, int vehicleId)
{
    Console.WriteLine(route.Id);
    Console.WriteLine(route.Date);
    Console.WriteLine(route.Schedule);

    var vehicle = route.Vehicles.Where(v => v.vehicleId == vehicleId).FirstOrDefault();

    if (vehicle != null)
    {
        Console.WriteLine(vehicle.VehicleRego);
    }

    Console.WriteLine(pickup.Supplier.Id);
}

除非您在routepickupsuppliervehicle 之间有循环引用,否则无法仅“猜测”信息。你必须像我一样提供它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2021-12-15
    • 2017-11-19
    相关资源
    最近更新 更多