public ListExercieseViewModel()
{
ListOfItemsSource = new ObservableCollection<Items>();
ListOfItemsSource.Add(new Items() { MainText="First" , SecondText="Test"});
ListOfItemsSource.Add(new Items() { MainText="Second" , SecondText="Test"});
ListOfItemsSource.Add(new Items() { MainText="Third" , SecondText="Test"});
ListOfItems = ListOfItemsSource.ToList();
SearchBar = new Command(OnTextChanged);
}
public string TextChanging
{
get
{
return _TextChanging;
}
set
{
if (value != null)
_TextChanging = value;
}
}
public List<Items> ListOfItems
{
get;
set;
}
public ObservableCollection<Items> ListOfItemsSource
{
get;
set;
}
public class Items : INotifyPropertyChanged
{
public string _MainText;
public string _SecondText;
public string MainText
{
get
{
return _MainText;
}
set
{
if (value != null)
_MainText = value;
NotifyPropertyChanged();
}
}
public string SecondText
{
get => _SecondText;
set
{
if (value != null)
_SecondText = value;
NotifyPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
问题就在这里:
public void OnTextChanged()
{
if (!String.IsNullOrEmpty(_TextChanging))
ListOfItems = ListOfItemsSource.Where(x => x.MainText.StartsWith(TextChanging)).ToList();
else
ListOfItems = ListOfItemsSource.ToList();
}
我试着为我的元素做一个过滤器,我用Linq来做,但是我有一个问题
最初,值 在TextChanging =“Th”之后,ListOfItems的计数为0,但我需要筛选此信息以显示“Third”
什么是错的
1条答案
按热度按时间63lcw9qa1#
在注解中,您提到您在搜索框中输入了“th”,并期望与“Third”匹配。如果您调用
string.StartsWith
时没有任何配置比较的参数,则比较是区分大小写的。因此,“th”不匹配,但“Th”匹配。解决这个问题最简单的方法是添加一个参数,指定比较应该不区分大小写,例如。
有关可用选项,请参阅此link。
或者,您可以在比较之前,将清单中的字串和您要寻找的文字转换成小写。