Порядок списка Silverlight - PullRequest
1 голос
/ 20 марта 2011

Есть ли способ заказать этот ListBox, связанный с silverlight. Я не уверен, что способ, которым я заселился, облегчает?

Пример кода здесь:

  XElement _xml = XElement.Load("MSA.xml");
        {
            msa.Items.Clear();

            foreach (XElement value in _xml.Elements("channel").Elements("msa"))
            {
                MSAFeedItem _item = new MSAFeedItem();
                _item.Lat = double.Parse(value.Element("lat").Value);
                _item.Long = double.Parse(value.Element("long").Value);
                _item.Name = value.Element("n").Value;


 double dis1 = _item.Lat - curLatitude;
                        double dis2 = _item.Long - curLongitude;

                     var miles1 = Math.Pow(dis1, 2.0);
                     var miles2 = Math.Pow(dis2, 2.0);

                     var miles3 = miles1 + miles2;

                     var miles4 = Math.Sqrt(miles3) ;

                     var miles = miles4 * 62.1371192;

                    _item.Distance = Decimal.Truncate(Convert.ToDecimal(miles));

                 msa.Items.Add(_item);

            }
        }

Это должно быть в порядке возрастания в соответствии с двойным или десятичным значением, называемым «милями» ListBox называется 'msa'

Большое спасибо за любую помощь или предложения.

РЕДАКТИРОВАТЬ: я добавил свой код расстояния, чтобы помочь вам понять, что происходит, поэтому _item.distance или «мили» - это число, на которое нужно подняться. Код немного запутан и не работает правильно, но вы поняли.

Ответы [ 2 ]

2 голосов
/ 20 марта 2011

Самый простой способ перейти сюда - это использовать список, который привязан к списку:

        var elements = new List<MSAFeedItem>();
        var comparison = new Comparison<MSAFeedItem>(
            (x, y) => {
                if (x.Miles < y.Miles) return -1;
                else if (x.Miles > y.Miles) return 1;
                else return 0;
            });
        foreach (XElement value in _xml.Elements("channel").Elements("msa")) 
        { 
            MSAFeedItem _item = new MSAFeedItem(); 
            _item.Lat = double.Parse(value.Element("lat").Value);
            _item.Long = double.Parse(value.Element("long").Value); 
            _item.Name = value.Element("n").Value; 
            _item.Distance = Decimal.Truncate(Convert.ToDecimal(miles)); 
            elements.Add(_item); 
        }

        elements.Sort(comparison);

        msa.ItemsSource = elements;

Очевидно, что свойство Miles для элементов X и Y заменяется способом вычисления количества миль..

1 голос
/ 20 марта 2011
 XElement _xml = XElement.Load("MSA.xml");
        {
            msa.Items.Clear();
            List<MSAFeedItem> tempItems = new List<MSAFeedItem>();

            foreach (XElement value in _xml.Elements("channel").Elements("msa"))
            {
                MSAFeedItem _item = new MSAFeedItem();
                _item.Lat = double.Parse(value.Element("lat").Value);
                _item.Long = double.Parse(value.Element("long").Value);
                _item.Name = value.Element("n").Value;


                double dis1 = _item.Lat - curLatitude;
                double dis2 = _item.Long - curLongitude;

                     var miles1 = Math.Pow(dis1, 2.0);
                     var miles2 = Math.Pow(dis2, 2.0);

                     var miles3 = miles1 + miles2;

                     var miles4 = Math.Sqrt(miles3) ;

                     var miles = miles4 * 62.1371192;

                    _item.Distance = Decimal.Truncate(Convert.ToDecimal(miles));

                 tempItems.Add(_item);

            }

           tempItems.OrderBy( i => i.Distance).ToList()
                    .ForEach(e => msa.Items.Add(e));

        }
...