Question

i already posted my question and i hope i will get an answer this time, i'm trying to refresh my listbox by using variables foreach elment in the listbox but i got only the new element and the other items deleted her's my code:

private void refresh()
{
    RestClient client = new RestClient();
    client.BaseUrl = "http";

    RestRequest request = new RestRequest();

    request.Method = Method.GET;
    request.AddParameter("action", "atms");

    request.AddParameter("lang", "ar");
    request.AddParameter("mode", "xml");
    request.AddParameter("appli", "WP");
    request.AddParameter("city_id", selectedState._id);
    client.ExecuteAsync(request, ParseFeedCallBack_ListAgence);
}

public void ParseFeedCallBack_ListAgence(IRestResponse response)
{
    if (response.StatusCode == HttpStatusCode.OK)
    {
        ParseXMLFeedAgences(response.Content);
    }
}

private void ParseXMLFeedAgences(string feed)
{
    if (feed == null)
        return;

    try
    {
        XElement xmlItems = XElement.Parse(feed);
        XDocument xmlItems2 = XDocument.Parse(feed);
        ResultSearch_List.ItemsSource =
            from response in xmlItems.Descendants("result")
            let add = response.Element("Address")
            let idagence = response.Element("id")
            let latt = response.Element("Latitude")
            let longt = response.Element("Longitude")

            select new State
            {
                Address = add == null ? null : add.Value,
                _idagence = idagence == null ? null : idagence.Value,
                Latitude = latt == null ? null : latt.Value,
                Longitude = longt == null ? null : longt.Value,
            };

        foreach (var resp in xmlItems2.Descendants("result"))
        {
            RestClient client = new RestClient();
            client.BaseUrl = "http:";

            RestRequest request = new RestRequest();

            request.Method = Method.GET;
            request.AddParameter("action", "atms_distances");
            request.AddParameter("lang", "ar");
            request.AddParameter("mobile_latitude", "35.843283");
            request.AddParameter("mobile_longitude", "10.61617");
            request.AddParameter("atm_latitude", "35.2579090");
            request.AddParameter("atm_longitude", "10.7992144");

            client.ExecuteAsync(request, response =>
                {
                    ParseXMLFeedDistance(response.Content);
                });
        }
    }
    catch (WebException)
    {
    }
}

private void ParseXMLFeedDistance(string feed)
{
    if (feed == null)
        return;

    try
    {
        XDocument xmlItems2 = XDocument.Parse(feed);

        var list = new List<State>();

        foreach (XElement val in xmlItems2.Descendants("result").Last().Elements())
        {
            list.Add(new State
                {
                    TotalDistance = val.Value,
                });
        }

        ResultSearch_List.ItemsSource = list;
    }
    catch
    {
    }
}

her's my code and please tell me what should i change:

foreach (XElement val in xmlItems2.Descendants("result"))
            {


                states.Add(new State
                {
                    Address = val.Element("Address").Value,
                    _idagence = val.Element("CityId").Value,
                    Latitude = val.Element("Latitude").Value,
                    Longitude = val.Element("Longitude").Value,

                });
            }

            foreach (var resp in xmlItems2.Descendants("result"))
            {
                RestClient client = new RestClient();
                client.BaseUrl = "http://";

                RestRequest request = new RestRequest();

                request.Method = Method.GET;
                request.AddParameter("action", "atms_distances");

                request.AddParameter("mode", "xml");
                request.AddParameter("appli", "WP");
                request.AddParameter("mobile_latitude", "35.843283");
                request.AddParameter("mobile_longitude", "10.61617");
                request.AddParameter("atm_latitude", "35.2579090");
                request.AddParameter("atm_longitude", "10.7992144");

                client.ExecuteAsync(request, response =>
                {

                    XDocument xmlItems22 = XDocument.Parse(response.Content);


                    foreach (XElement val in xmlItems22.Descendants("result").Last().Elements())
                    {

                        //  distance = val.Value;
                        states.Add(new State
                        {
                            TotalDistance = val.Value,
                        });
                    }
                    ResultSearch_List.ItemsSource = states;
                });
            }
Was it helpful?

Solution

Don't use List as your data source, instead use ObservableCollection:

// keep this in your class
ObservableCollection<State> States { get; set; }

// add to constructor
States = new ObservableCollection<State>();

Now change the last function (ParseXMLFeedDistance) to this:

private void ParseXMLFeedDistance(string feed)
{
    if (feed == null)
        return;

    try
    {
        XDocument xmlItems2 = XDocument.Parse(feed);

        foreach (XElement val in xmlItems2.Descendants("result").Last().Elements())
        {
            // distance = val.Value;
            list.Add(new State
            {
                TotalDistance = val.Value,
            });
        }
    }
    catch {}
}

Don't reset the list, you are always destroying it and creating from scratch.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top