Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Silverlight列表框订购人_C#_Silverlight_List_Listbox - Fatal编程技术网

C# Silverlight列表框订购人

C# Silverlight列表框订购人,c#,silverlight,list,listbox,C#,Silverlight,List,Listbox,有没有办法订购这个silverlight绑定的列表框。我不确定我的居住方式是否让它变得容易 此处的代码示例: XElement _xml = XElement.Load("MSA.xml"); { msa.Items.Clear(); foreach (XElement value in _xml.Elements("channel").Elements("msa")) {

有没有办法订购这个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);

            }
        }
它需要根据称为“英里”的双精度或十进制值按升序排列 列表框称为“msa”

非常感谢您的帮助或建议

编辑:我添加了我的距离代码来帮助你了解发生了什么,所以_item.distance或“miles”是它需要上升的数字。
代码有点凌乱,不能完全正确地工作,但你明白了。

最简单的方法是使用一个列表,它绑定到列表框:

        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;
var元素=新列表();
var比较=新比较(
(x,y)=>{
如果(x.Milesy.Miles)返回1;
否则返回0;
});
foreach(xml.Elements(“通道”).Elements(“msa”)中的XElement值)
{ 
MSAFeedItem_item=新的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(转换为Decimal(英里));
元素。添加(_项);
}
元素。排序(比较);
msa.itemsource=元素;
显然,将X和Y项上的Miles属性替换为计算英里数的方式。

XElement\u xml=XElement.Load(“MSA.xml”);
 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));

        }
{ msa.Items.Clear(); List tempItems=新列表(); foreach(xml.Elements(“通道”).Elements(“msa”)中的XElement值) { MSAFeedItem_item=新的MSAFeedItem(); _item.Lat=double.Parse(value.Element(“Lat”).value); _item.Long=double.Parse(value.Element(“Long”).value); _item.Name=value.Element(“n”).value; 双dis1=_item.Lat-卷曲度; 双dis2=_item.Long-卷曲度; var miles1=数学功率(dis1,2.0); var miles2=数学功率(dis2,2.0); var miles3=miles1+miles2; var miles4=数学Sqrt(miles3); 可变里程=英里4*62.1371192; _item.Distance=Decimal.Truncate(转换为Decimal(英里)); 添加(_项); } tempItems.OrderBy(i=>i.Distance).ToList() .ForEach(e=>msa.Items.Add(e)); }
那么
miles
与您想要排序的XML数据无关?您好,是的,“miles”是从上面示例中缺少的一段代码生成的。(基本上计算出你离某个特定位置有多少英里)编辑我的问题/代码以帮助理解我在做什么。谢谢,编辑我的问题/代码以帮助你理解我在做什么。很抱歉给您带来困惑。添加到列表是正确的方法。您可以使用Linq对属性-
元素进行排序。OrderBy(i=>i.Distance)
Hi谢谢,这看起来不错,但是Items后面的.AddRange是什么。?没有项目的扩展。嗨,谢谢,SOE,AddRange没有出现。这是因为我的列表框“msa”来自System.Windows.controls。因此,im收到错误消息:错误1“System.Windows.Controls.ItemCollection”不包含“AddRange”的定义,并且找不到接受“System.Windows.Controls.ItemCollection”类型的第一个参数的扩展方法“AddRange”(是否缺少using指令或程序集引用?)C:\Users\Dan\Documents\visualstudio 2010\Projects\msa_uk\msa_uk\Nearest.xaml.cs 118 27 msa_uk。这是一个基于silverlight的WindowsPhone7项目,如果这会造成差异的话。