【发布时间】:2020-10-01 07:59:23
【问题描述】:
我有 SearchBar,它可以从 List 中实时搜索信息。但是我有一个问题。例如,当我在字段中写入文本时,会显示新文本,但是当我删除部分文本时,它不会更新到之前的状态。那就是如果我有列表:
BAC
BAE
北汽
贝利
巴贾杰
贝克
电动
鲍德温运动
投票
当我写例如白或白时,我的清单显示给我
北汽
贝利 但是当擦除字母(现在是 ba)时,它必须显示 BAC
BAE
北汽
贝利
巴贾杰
贝克
但它仍然是 北汽
贝利
请帮忙
Xaml 代码
<Frame CornerRadius="15" HasShadow="True" BorderColor="LightGray" Margin="0,10,0,0" Padding="5">
<controls:CustomSearchBar x:Name="searchBar"
TextColor="Gray"
>
<!----> <corcav:Interaction.Behaviors>
<corcav:BehaviorCollection>
<corcav:EventToCommand EventName="TextChanged" Command="{Binding Path=SearchBarTextChangedCommand}" PassEventArgument="True"/>
</corcav:BehaviorCollection>
</corcav:Interaction.Behaviors>
</controls:CustomSearchBar>
</Frame>
<ListView x:Name="Company" SelectionMode="None" ItemsSource="{Binding SearchedCars}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="46" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackLayout>
<controls:ExtendedButton2 HeightRequest="45" Padding="5,10,0,10"
WidthRequest="300" Margin="0" HorizontalTextAlignment="Start"
BackgroundColor="{Binding CustButtonColor}" Text="{Binding Name}" TextColor="Gray" FontSize="18"
Command="{ Binding BindingContext.ChangeMark,
Source={x:Reference Name=Company} }" CommandParameter="{Binding .}"/>
<BoxView Margin="0,-6,0,0"
HeightRequest="1"
BackgroundColor="LightGray"
HorizontalOptions="FillAndExpand" VerticalOptions="End"/>
</StackLayout>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
视图模型
class CarAddCompany : INotifyPropertyChanged
{
private List<Car> Cars = new List<Car>();
public List<Car> SearchedCars { get => Cars; set { Cars = value; OnPropertyChanged("SearchedCars"); } }
public ICommand ChangeMark { protected set; get; }
public MainCar mainCar { get; set; }
INavigation Navigation { get; set; }
public Command navigateCommand { get; set; }
public Command navigateCommandBACK { get; set; }
public ICommand SearchBarTextChangedCommand { get; set; }
public async Task GotoPage2()
{
if (mainCar.MarkCar != null) await Navigation.PushModalAsync(new Car_add_model(mainCar));
}
public async Task GotoPage1()
{
//mainCar.MarkCar ="";
// await Navigation.PushModalAsync(new Car_add());
await Navigation.PopModalAsync();
}
private void OnSearchBarTextChanged(object obj)
{
if (obj is TextChangedEventArgs args)
{
string filter = args.NewTextValue;
SearchedCars = Cars.Where(x => x.Name.ToLower().Contains(filter.Trim().ToLower())).ToList();
}
}
public CarAddCompany(INavigation navigation,MainCar carC)
{
mainCar = carC;
this.Navigation = navigation;
this.navigateCommand = new Command(async () => await GotoPage2());
navigateCommandBACK = new Command(async () => await GotoPage1());
SearchBarTextChangedCommand = new Command<object>(OnSearchBarTextChanged);
Cars = new List<Car>();
Cars.Add(new Car() { Name = "BAC", CustButtonColor = Color.White });
Cars.Add(new Car() { Name = "BAE", CustButtonColor = Color.White });
Cars.Add(new Car() { Name = "BAIC", CustButtonColor = Color.White });
Cars.Add(new Car() { Name = "Bailey", CustButtonColor = Color.White });
Cars.Add(new Car() { Name = "Bajaj", CustButtonColor = Color.White });
Cars.Add(new Car() { Name = "Baker", CustButtonColor = Color.White });
Cars.Add(new Car() { Name = "Electric", CustButtonColor = Color.White });
Cars.Add(new Car() { Name = "Baldwin-Motion",CustButtonColor = Color.White });
Cars.Add(new Car() { Name = "Ballot", CustButtonColor = Color.White });
foreach (var item in Cars)
{
item.CustButtonColor = Color.White;
}
var car = key as Car;
car.CustButtonColor = Color.FromHex("#D1DAED");
mainCar.MarkCar = car.Name;
});
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
我希望当我删除一个单词时,我会用 Ba 显示上一个列表。取决于搜索栏中的文本
【问题讨论】:
-
擦除字符时 OnSearchBarTextChanged 会触发吗?
标签: c# xaml xamarin xamarin.forms xamarin.android