可观察的收集问题

时间:2011-01-16 15:14:57

标签: c# .net silverlight windows-phone-7 observablecollection

我正在努力研究Observable系列并使用它将图钉添加到silverlight bing地图上。我试图使用Linq在这里建立一个集合。但我在我的代码中的每个“PushPinItems”实例下得到错误:

'observable_collection_test.Map.PushPinItems' is a 'field' but is used like a 'type' c:\users\dan\documents\visual studio 2010\Projects\observable collection test\observable collection test\Map.xaml.cs 26 38 observable collection test

不确定这里发生了什么,我是宣布/构建错误还是什么? 我是Observable系列的新手(以及大多数c#!),欢迎任何帮助/建议。非常感谢。

更新

现在这似乎没问题,上面的问题,但现在它没有将我的项目绑定到图钉。 我看过“PushPins = pushPinCollection;”方法和所有143项都在那里有纬度,长度和位置属性以及正确的数据 - 根据这个断点:

alt text

我的XAML绑定可能有问题吗?

以下是更新后的代码:

  namespace observable_collection_test
 {
public partial class Map : PhoneApplicationPage
{

    private ObservableCollection<SItem2> _PushPins;

    public event PropertyChangedEventHandler PropertyChanged;

    public Map()
    {
        InitializeComponent();

        getItems();
    }

    public ObservableCollection<SItem2> PushPins
    {
        get
        {
            return _PushPins;
        }


        private set
        {
            _PushPins = value;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("PushPins"));
            }


        }
    }
    private GeoCoordinate _location;

    public GeoCoordinate Location
    {
        get { return _location; }
        set
        {
            if (_location != value)
            {
                _location = value;
                               }
        }
    }

    private string _pinSource;

    public string PinSource
    {
        get { return _pinSource; }
        set
        {
            if (_pinSource != value)
            {
                _pinSource = value;
                                }
        }
    }

    public void getItems()
    {
         var document = XDocument.Load("ListSmall.xml");

         if (document.Root == null)
            return;

          var xmlns = XNamespace.Get("http://www.blahblah.co.uk/blah");

         var events = from ev in document.Descendants("item")
          select new
          {
           Latitude = Convert.ToDouble(ev.Element(xmlns + "Point").Element(xmlns + "lat").Value),
            Longitude = Convert.ToDouble(ev.Element(xmlns + "Point").Element(xmlns + "long").Value),

         };

         ObservableCollection<SItem2> pushPinCollection = new ObservableCollection<SItem2>();

          foreach (var ev in events)

                         {
                           SItem2 PushPin = new SItem2
                (                    ev.Latitude, ev.Longitude)
            {

            };

            pushPinCollection.Add(PushPin);

        }
        PushPins = pushPinCollection;


    }

其他课程:

namespace observable_collection_test
 {

public class SItem2
    {
    //public DateTimeOffset Date { get; set; }
    //public string Title
    //{ get; set; }
    public double Latitude
    { get; set; }
    public double Longitude
    { get; set; }
    public GeoCoordinate Location
    { get; set; }
    //public Uri Link { get; set; }


    public SItem2(//string Title, 
        double Latitude, double Longitude)
    {
        //this.Date = Date;
        //this.Title = Title;
        this.Latitude = Latitude;
        this.Longitude = Longitude;
        //this.Location = Location;
        //this.Link = Link;
    }
}

关于添加引脚到映射的XAML位:

      <my:Map ZoomBarVisibility="Visible" ZoomLevel="10" CredentialsProvider="AhqTWqHxryix_GnWER5WYH44tFuutXNEPvFm5H_CvsZHQ_U7-drCdRDvcWSNz6aT"  Height="508" HorizontalAlignment="Left" Margin="0,22,0,0" Name="map1" VerticalAlignment="Top" Width="456">
                                        <my:MapItemsControl ItemsSource="{Binding PushPins}" >
                <my:MapItemsControl.ItemTemplate>
                    <DataTemplate>
                        <my:Pushpin Background="Aqua" Location="{Binding Location}" ManipulationCompleted="pin_click">
                        </my:Pushpin>
                    </DataTemplate>
                </my:MapItemsControl.ItemTemplate>
            </my:MapItemsControl>

        </my:Map> 

知道我是否正在以正确的方式接近图钉绑定地图也是一件好事。

1 个答案:

答案 0 :(得分:1)

看起来好像这是因为您在XAML中使用了x:Name="PushPinItems",它与您的某个类型名称相同,所以当您认为在代码隐藏中引用了PushPinItems类型时,实际上是在引用VS从您的XAML为您生成的字段,表示该Pushpin实例。您可以在XAML中使用不同的x:Name

<强>更新

好的,我看到了问题:)我以前没有使用Bing地图控件,但是看http://forums.silverlight.net/forums/t/197631.aspx(第二篇文章下来),你需要设置地图控件MapItemsControl属性。这里的ItemsSource属性应绑定到自定义类型的ObservableCollection,该类型包含Name和Location等属性。然后,您可以使用此自定义类型的实例填充此集合(在帖子中,他们使用MapData作为类型名称)。

您还可以在http://www.microsoft.com/maps/isdk/silverlight/

获取更多示例和源代码