Привязка кнопок к картам Bing - PullRequest
1 голос
/ 19 декабря 2010

Я работаю над проектом WP7 и пытаюсь привязать кнопки к определенным способам карт, но это просто не сработает.Кажется, что файл XML прочитан нормально, так как он считает все элементы, а затем загружает карту, но просто помещает черную метку в верхний правый угол карты.Был бы благодарен за любые идеи, почему это не оспаривает вешки.Большое спасибо.Я думаю, что включил весь соответствующий код ..

   namespace maps_data_test_2
{
   public class LocationData
{
    public Location Location
    {
        get;
        set;
    }
    public String CustomerName
    { get; set; }
    public Int32 CustomerId
    { get; set; }
    public LocationData()
    {
        this.Location = new Location();

    }
}
/// <summary>
/// This class exposes IEnumerable, and acts as ItemsSource for 
/// MapItemsControl
/// </summary>
public class LocationDataCollection : ObservableCollection<LocationData>
{
    public bool IsDataSource
    {
        get
        {
            return true;
        }
        set
        {
            this.Load();
        }
    }

    public LocationDataCollection()
    {

    }

    public void Load()
    {
        Uri url = new Uri("http://www.equestrian-photo.com/CustomerData.xml", UriKind.Absolute);
        WebClient client = new WebClient();
        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
        client.DownloadStringAsync(url);
    }
    void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null) 

        {
            StringReader stream = new StringReader(e.Result);
            XmlReader reader = XmlReader.Create(stream);
            Double Lat = 0.00;
            Double Lng = 0.00;
            String CustomerName = "";
            Int32 CustomerId = 0;
            LocationDataCollection locationList = new LocationDataCollection();

            while (reader.Read())
            {
                reader.MoveToContent();
                if (reader.NodeType == XmlNodeType.Element)
                {
                    reader.MoveToFirstAttribute();
                }
                if (reader.NodeType == XmlNodeType.Attribute)
                {
                    if (true == reader.MoveToAttribute("Latitude"))
                    {
                        Lat = reader.HasValue ? Convert.ToDouble(reader.Value) : 0.00;
                    }
                    if (true == reader.MoveToAttribute("Longitude"))
                    {
                        Lng = reader.HasValue ? Convert.ToDouble(reader.Value) : 0.00;
                    }
                    if (true == reader.MoveToAttribute("CustomerName"))
                    {
                        CustomerName = reader.Value.ToString();
                    }
                    if (true == reader.MoveToAttribute("CustID"))
                    {
                        CustomerId = Convert.ToInt32(reader.Value);
                    }
                    LocationData T = new LocationData();
                    T.Location.Latitude = Lat;
                    T.Location.Longitude = Lng;
                    T.CustomerName = CustomerName;
                    locationList.Add(T);
                }
            }
            IEnumerator ppEnum = locationList.GetEnumerator();
            while (ppEnum.MoveNext())
            {
                this.Add((LocationData)ppEnum.Current);
            }
            reader.Close();
        }
    }
}

}

Код Xaml:

<phone:PhoneApplicationPage 

x:Class="maps_data_test_2.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:t="clr-namespace:maps_data_test_2"

xmlns: m = "clr- пространство имен: MicrosoftPhone.Controls.Maps; Assembly = Microsoft.Phone.Controls.Maps "

mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">

<phone:PhoneApplicationPage.Resources>
    <DataTemplate x:Key="LogoTemplate">
        <m:Pushpin Location="{Binding Location}" />


    </DataTemplate>
    <t:LocationDataCollection x:Key="LocationList" IsDataSource="True"/>

<Grid>
    <m:Map Height="450" Width="450" x:Name="mMap"     Cred entialsProvider=""
            Mode="Road" 
             >
        <m:MapItemsControl x:Name="ListOfItems"
                    ItemTemplate="{StaticResource LogoTemplate}"
                    ItemsSource="{StaticResource LocationList}">
        </m:MapItemsControl>
    </m:Map>
</Grid>



</phone:PhoneApplicationPage>

Ответы [ 2 ]

0 голосов
/ 11 апреля 2012

@ Dan Имейте коллекцию LocationData как свойство и как тип ObservableCollection. И вы можете заполнить данные в эту коллекцию.

0 голосов
/ 20 декабря 2010

Ваша проблема в том, что, поскольку вы наследуете от наблюдаемой коллекции, а не делаете ее свойством, вы не связываетесь правильно.Попробуйте это для MapItemsControl:

<m:MapItemsControl x:Name="ListOfItems" 
    ItemTemplate="{StaticResource LogoTemplate}"
    ItemsSource="{Binding}"
    DataContext="{StaticResource LocationList}"/> 

При запуске исходного кода вы также должны получить сообщение об ошибке привязки в консоли отладки.Вместо того, чтобы наследовать от ObservableCollection <>, я бы сделал его свойством, которое инициализируется в конструкторе:

public ObservableCollection<LocationData> Locations {get; private set;}
...