我的Xamarin表单应用程序中有这个搜索栏功能,当你开始输入所有信息时,它工作得很好,但当你开始删除单词时,视图不会刷新,它只是清除所有信息。
下面是搜索的代码
private void SearchBar_TextChanged(object sender, TextChangedEventArgs e)
{
SearchBar searchBar = (SearchBar)sender;
noMowersFoundLabel.IsVisible = false;
//Check if the user cleared the text bar, if so: reload list of mowers
if (searchBar.Text.Length == 0)
{
_viewModel.IsBusy = true;
return;
}
//Max 6 digits in a serial number
if (searchBar.Text.Length < 6)
{
//compares substrings to add to the list while the user has not entered full serial number
var sorted = new List<Mower>();
foreach (var m in _viewModel.Items)
{
if (m.MachineSerialNumber.Length > searchBar.Text.Length)
{
//var serialNum = m.MachineSerialNumber.Substring(0, Math.Min(searchBar.Text.Length, 6));
if (m.MachineSerialNumber.Contains(searchBar.Text))
{
sorted.Add(m);
}
}
}
foreach(var m in sorted)
{
if (!m.MachineSerialNumber.Contains(searchBar.Text))
{
sorted.Remove(m);
}
}
sorted.Sort((p1, p2) => (p1.MachineSerialNumber.CompareTo(p2.MachineSerialNumber)));
if(sorted.Count != 0)
{
_viewModel.Items.Clear();
foreach(var m in sorted)
{
_viewModel.Items.Add(m);
}
}
else
{
_viewModel.Items.Clear();
noMowersFoundLabel.IsVisible = true;
}
}
else //user has entered full serial number
{
Mower selectedItem = null;
foreach (var m in _viewModel.Items)
{
if(m.MachineSerialNumber == searchBar.Text)
{
selectedItem = m;
}
}
if(selectedItem != null)
{
//We found the item
_viewModel.Items.Clear();
_viewModel.Items.Add(selectedItem);
}
else{
//No item found
_viewModel.Items.Clear();
noMowersFoundLabel.IsVisible = true;
}
}
我希望视图在您开始删除单词时填充信息
1条答案
按热度按时间bqucvtff1#
我认为没有必要区分输入字符串的长度。
我创建了一个演示并实现了这个功能,可以参考下面的代码:
我将函数
GetSearchResults
添加到MyViewModel.cs
中一旦输入了输入字符串,我们可以做如下: