我從服務器得到響應,它是Json,其中有關於街道名稱的數據。然後我將響應字符串解析爲Json,並將街道名稱添加到列表中。我希望當文本長度等於2時(我按下Autocompletebox中的第二個字符),此列表將顯示在自動完成框中的下拉列表中。 另外我使用Json.Net庫。 我使用此代碼:不要在Windows Phone中的自動完成框中顯示下拉列表
下面是類(JsonWorker)使用:
class JsonWorker
{
public async Task<HttpWebResponse> send(string requestUrl, JObject jsonObjesct)
{
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(requestUrl);
request.ContentType = "text/plain; charset=utf-8";
request.Method = "POST";
byte[] jsonAsBytes = Encoding.UTF8.GetBytes(jsonObjesct.ToString());
Stream x = await request.GetRequestStreamAsync();
await x.WriteAsync(jsonAsBytes, 0, jsonAsBytes.Length);
x.Close();
HttpWebResponse response = (HttpWebResponse) (await request.GetResponseAsync());
return response;
}
public async Task<string> get(
HttpWebResponse response)
{
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
string str_responsefromjson = await sr.ReadToEndAsync();
sr.Close();
stream.Close();
return str_responsefromjson;
}
這裏是方法(GetSteets):
private async Task<List<string>> GetStreets()
{
JObject jo = new JObject();
jo.Add("chars", AutoCompleteBox_Streets.Text);
jo.Add("city_id", "1");
JsonWorker jWorker = new JsonWorker();
var response = await jWorker.send("website", jo);
string str_responseformjson = await jWorker.get(response);
jo = JObject.Parse(str_responseformjson);
JArray ja = (JArray)jo["street"];
List<string> list_Streets = new List<string>();
foreach (var elem in ja)
{
list_Streets.Add(elem["title"].ToString());
}
return list_Streets;
}
下面是當我打電話上述方法:
private async void AutoCompleteBox_Streets_TextChanged(object sender, RoutedEventArgs e)
{
if (AutoCompleteBox_Streets.Text.Length.Equals(2))
{
AutoCompleteBox_Streets.ItemsSource = await GetStreets();
//On the string of code above in debug, ItemSource contains list of streets
}
}
而當我在自動完成框中輸入第二個字符時,它不顯示下拉列表。請幫忙。
此外,如果我將FilterMode更改爲包含,它會在輸入3或4個字符時啓動show drop down。一些神奇的... – vasa911