我在Win10上的Windows Universal应用程序中使用AutoSuggestBox。我可以很好地过滤建议,但顺序是混乱的。例如,在我的例子中,建议是城市名称。当我在框中键入“t”时,我希望首先看到的是“德黑兰”,而不是“雅典”,因为它位于列表的顶部,其中包含所有带有“t”的城市。
我意识到我需要一个按以下顺序排序的列表
City.Name.IndexOf(sender.Text, StringComparison.OrdinalIgnoreCase)但是,实现这一目标的最简单和最有效的方法是什么?我的代码如下:
private void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{
// Only get results when it was a user typing
if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
{
List<string> myList = new List<string>();
foreach (City myCity in Cities)
{
if (myCity.Name.IndexOf(sender.Text, StringComparison.OrdinalIgnoreCase) >= 0)
{
myList.Add(myCity.Name);
}
}
sender.ItemsSource = myList;
}
}发布于 2015-08-27 16:12:28
Ty this
if (myCity.Name.StartsWith("t"))
myList.Add(myCity.Name);发布于 2015-08-27 16:22:59
最后,我将条件更改为
if (myCity.Name.IndexOf(sender.Text, StringComparison.OrdinalIgnoreCase) == 0)发布于 2015-08-27 16:31:35
您可以使用StartsWith & Contains函数。
if (myCity.Name.StartsWith("t"))
myList.Add(myCity.Name);
if (myCity.Name.Contains("t"))
myList.Add(myCity.Name);但它们必须在单独的foreach循环中使用。第一个过滤掉所有以T开头的城市,下一个过滤掉所有包含T的城市。
如果你想在一个foreach循环中使用它,你可以这样做:
if (myCity.Name.StartsWith("t"))
myList1.Add(myCity.Name);
if (myCity.Name.Contains("t") && myCity.Name.IndexOf(sender.Text, StringComparison.OrdinalIgnoreCase) != 0)
myList2.Add(myCity.Name);然后,您可以合并这两个列表,并将其作为itesmSource。
https://stackoverflow.com/questions/32243196
复制相似问题