1

I am working on a Xamarin.Forms Project and I am at a dead-end of sorts. My issue is that I want to display user transactions which I pull from a server, in a listview, however I need four different pull requests to get all the data which means I have four different objects lists which I grouped by the transaction number as you can see in this screenshot:

The key transaction number can be seen and if you expand you'll see the other data within each transaction

Here is the code where I group the deserialised json lists with the common key:

                    var t = JsonConvert.DeserializeObject<List<trans_mod>>(transactions);
                    var l = JsonConvert.DeserializeObject<List<loc_mod>>(loc);
                    var d = JsonConvert.DeserializeObject<List<disc_mod>>(disc);
                    var it = JsonConvert.DeserializeObject<List<item_mod>>(itm);

                    var q = it.AsQueryable().GroupBy(g => g.trans).ToList();
                    var q2= d.AsQueryable().GroupBy(g => g.trans).ToList();
                    var q3 = l.AsQueryable().GroupBy(g => g.trans).ToList();
                    var q4 = t.AsQueryable().GroupBy(g => g.position).ToList();

Object Models for each list

 public class loc_mod
    {
        [DataMember]
        public string location { get; set; }

        [JsonProperty(PropertyName = "@modify_stamp")]
        public string stamp { get; set; }

        [JsonProperty(PropertyName = "$trans")]
        public string trans { get; set; }
    }

    public class disc_mod
    {
        [DataMember]
        public string discount { get; set; }

        [JsonProperty(PropertyName = "@modify_stamp")]
        public string stamp { get; set; }

        [JsonProperty(PropertyName = "$trans")]
        public string trans { get; set; }
    }

    public class item_mod
    {
        [JsonProperty(PropertyName = "item.price")]
        public string price { get; set; }

        [JsonProperty(PropertyName = "item.name")]
        public string name { get; set; }

        [JsonProperty(PropertyName = "@modify_stamp")]
        public string stamp { get; set; }

        [JsonProperty(PropertyName = "$trans")]
        public string trans { get; set; }
    }


public class trans_mod
{
    [DataMember]
    public string refer { get; set; }

    [DataMember]
    public string date { get; set; }

    [DataMember]
    public string time { get; set; }

    [DataMember]
    public int points { get; set; }

    [DataMember]
    public string _total { get; set; }

    [JsonProperty(PropertyName = "$$position")]
    public string position { get; set; }

    [JsonProperty(PropertyName = "@modify_stamp")]
    public string stamp { get; set; }

    [JsonProperty(PropertyName = "$trans")]
    public string trans { get; set; }
}


public class itms
{

    public string price { get; set; }


    public string name { get; set; }


    public DateTime stamp { get; set; }

    [JsonProperty(PropertyName = "$trans")]
    public string trans { get; set; }
}

What I want to do is to loop through all four lists and add the data from each list in the listview but I can't think of a way I can do that.

Listview Add() code Example:

Transactions.Add(new Transaction
                 {
                     Details = "Date: " + ti[i].date + " | Time: " + ti[i].time + " | 
                     Reference: " + ti[i].refer,
                     Isvisible = false, Items= ti[i].item, Total = ti[i].total, Discount 
                     = ti[i].discount
                 });

Sorry if this is a bit confusing, it's confusing for me as well as I am a relative beginner. Any help is welcome!

1
  • you really need to create a consolidated ViewModel that ties all of this data together Commented Jul 28, 2021 at 16:53

1 Answer 1

1

Define an Interface that your item classes all implement.
That interface has a method that returns whatever you need for listview.

public Interface IHasTransaction
{
    Transaction GetTransaction();
}

public class loc_mod : IHasTransaction
{
    ...
    public Transaction GetTransaction()
    {
        // Use fields of this class to create a Transaction.
        return new Transaction(...);
    }
}

public class disc_mod : IHasTransaction
{
     ...
}

If you want, you can make a list that has a mixture of these:

public List<IHasTransaction> models = new List<IHasTransaction>();
models.Add(new loc_mod(...));
models.Add(new disc_mod(...));

Given any of these items

IHasTransaction model

You can easily get the corresponding Transaction:

model.GetTransaction()

OR

var lm = new loc_mod(...);
lm.GetTransaction()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.