因为几天我在网上搜索解决方案。 我想要的是一个自动完成的搜索框,它最终给了我搜索到的地址或地点的经度和时间。
所以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>
很多。
答案 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;
}