2013-12-08 72 views
0

所以,我設置了數據上下文,當我瀏覽到Bing地圖應顯示正確的位置,這樣的頁面:打開Bing地圖來綁定座標

 protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     var k = (app.MainPage.Country)PhoneApplicationService.Current.State["country"]; 
     DataContext = k; 
    } 

我設置在XAML中的位置:

 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="0,0,0,0"> 
     <maps:Map x:Name="MyMap" Center="{Binding BingCoordinates}" ZoomLevel="10"/> 
    </Grid> 

BingCoordinates是這樣的:41.333333,19.800000

但它無法正常工作。它打開一張地圖,指向剛果,哈哈。如果我將代碼更改爲:

 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="0,0,0,0"> 
     <maps:Map x:Name="MyMap" Center="41.333333,19.800000" ZoomLevel="10"/> 
    </Grid> 

它的工作原理,爲什麼它不起作用,如果我綁定座標?我可以用C#這樣做,但我不知道如何綁定的座標如下:

mapsTask.Center = new GeoCoordinate(41.333333,19.800000); 

感謝您的幫助:)

+0

什麼是BingCoordinates,一個字符串對象? –

+0

我看到你在那裏做了什麼,它一定是int正確嗎? :D – Skynet

+0

好吧,說實話 - 幾乎沒有。不是int。您是否嘗試過使用GeoCoordinate? –

回答

0

正如一些評論已經指出,爲您綁定的原因失敗的是分配的類型不是預期的類型(GeoCoordinate)。

爲了解決這個問題,我可以考慮兩種方法。哪一個更合適取決於關心分離的想法。

  1. 更改數據源以提供可以綁定到的對象。 在您的viewmodel(數據上下文)中,您有一個名爲「BingCoordinates」的屬性。現在,該屬性似乎是字符串類型(從我的理解)。將其類型更改爲GeoCoordinate可以解決您的問題。您只需將字符串解析爲GeoCoordinate即可。 這可能做的伎倆(未經測試):

    var r = (string)query.Element("bingCoordinates").Split(','); 
    BingCoordinates = new GeoCoordinate(r[0], r[1]); 
    

    提示:會有地理座標構造函數第一個參數是緯度其次是經度。 另請注意,如果您想避免可能的異常,應該使用對拆分操作的空檢查。

  2. 使用ValueConverter將源對象轉換爲您的視圖「理解」的元素。 如果您出於某種原因決定您的模型的表示是準確的並且改變了它,那麼這並沒有多大意義,您可以隨時將該值轉換爲需求值。 要做到這一點,可以使用ValueConverter。 ValueConverter是一個實現IValueConverter接口的類,可用於綁定將值轉換爲所需類型(最常見的示例:將布爾值(true/false)轉換爲Visibility類型)。 Learn more about value converters

+0

你知道我該怎麼用c#(mapsTask)做這個?因爲它更好,它會完全打開bing地圖,而不僅僅是地圖。 – Skynet

相關問題