获取带有可能位置(地址)Windows手机的自动完成框

时间:2014-09-28 09:13:11

标签: c# json windows-phone-8 autocomplete location

因为几天我在网上搜索解决方案。 我想要的是一个自动完成的搜索框,它最终给了我搜索到的地址或地点的经度和时间。

所以here我正是我需要的,问题是,图像消失了,所以我被卡住了。

  • 如何将文本框的内容发送到我的位置api url(在我的TextChange事件处理程序中)

  • 如何在事件处理程序中读取json响应并将其绑定到我的LisBox项目?

  • 以及最后一点,我如何获得所选项目的经度和期限,以便我可以使用它?

这里是eventhandler和xaml代码

private void SearchForTerm(object sender, System.Windows.Controls.TextChangedEventArgs e)
    {
        //??
    }

<TextBox 
      Foreground="Gray" 
      Text="Search Location"
      TextWrapping="Wrap" 
      Margin="0,470,0,0" 
      Height="72" 
      VerticalAlignment="Top" 
      AcceptsReturn="True" 
      GotFocus="TextBox_GotFocus"
      LostFocus="TextBox_LostFocus" 
      TextChanged="SearchForTerm"
      />

<ListBox x:Name="Suggestion_listbox" 
         Margin="12,65,0,179">

</ListBox>
很多。

1 个答案:

答案 0 :(得分:2)

我认为你可以使用WPToolkit中的AutoCompleteBox,这将非常方便和易于使用。有很多关于它的教程,这里是one

如果你想在每个文本更改事件后获得结果,那么你可以使用带有更改文本的WebClient来调用该web服务。我不确定该位置api但是这里是一个从OpenWeatherMapAPI获取当前天气信息的示例。您也可以在案例中使用它来获取数据。

WebClient wc = new WebClient();
wc.DownloadStringCompleted+=wc_DownloadStringCompleted;
wc.DownloadStringAsync(new Uri("http://api.openweathermap.org/data/2.5/weather?q="+location +"&units=metric",UriKind.Absolute));

在从Web服务获得响应后,您可以使用JSON.NET反序列化JSON响应并将json响应映射到c#类,您可以使用此Web工具 - json2csharp这是DownloadStringCompleted事件处理程序我的例子。

void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
     if (!string.IsNullOrEmpty(e.Result))
     {
            WeatherData weatherDt = JsonConvert.DeserializeObject<WeatherData>(e.Result);
     }
}

此处WeatherData是该Json响应的根对象。并且您可以使用JsonConvert.DeserializeObject(e.Result)将json响应映射到WeatherData对象;

要列出DataBinding,请参阅此question的解决方案。

要将所选项目作为对象,您可以使用Tap事件处理程序。

 private void Suggestion_listbox_Tap(object sender, System.Windows.Input.GestureEventArgs e)
 {
        ListBox list = sender as ListBox;
        ClassName obj = list.SelectedItem as ClassName;
 }