我试图将文本从 Shell.SearchHandler 推送到命令。
我已经使用 SearchBar 构建了它,但是我需要它在 Shell.SearchHandler
中工作<Shell.SearchHandler >
<SearchHandler x:Name="searchBar"
Placeholder="Search..."
Command="{Binding PerformSearch}"
CommandParameter="{Binding Text, Source={x:Reference searchBar}}" TextColor="Black" BackgroundColor="LightGray" />
</Shell.SearchHandler>
在我的View模型中
public ICommand PerformSearch => new Command<string>((string query) =>
{
//do work
});
该命令确实执行,但查询参数始终为空。
如何获取输入到searchandler中的文本以发布到绑定命令中?
答案 0 :(得分:0)
CommandParameter =“ {绑定文本,源= {x:参考searchBar}}”
按如下方式查看 SearchHandler reference 文档:
原因是SearchHandler
不包含Text
属性。您应该将其替换为 Query ,然后它才能工作。
<Shell.SearchHandler >
<SearchHandler x:Name="searchBar"
Placeholder="Search..."
Command="{Binding PerformSearch}"
CommandParameter="{Binding Query, Source={x:Reference searchBar}}"
TextColor="Black"
BackgroundColor="LightGray" />
</Shell.SearchHandler>
注意:如果需要,Custom a SearchHandler也可以监视查询更改。
创建一个MySearchHandler
:
public class MySearchHandler : SearchHandler
{
protected override void OnQueryChanged(string oldValue, string newValue)
{
base.OnQueryChanged(oldValue, newValue);
if (string.IsNullOrWhiteSpace(newValue))
{
ItemsSource = null;
}
else
{
Console.WriteLine("search string " + newValue);
// here you can add code to deal with the viewmodel
//ItemsSource = MonkeyData.Monkeys
.Where(monkey => monkey.Name.ToLower().Contains(newValue.ToLower()))
.ToList<Animal>();
}
}
}
在Xaml
中:
<ContentPage ...
xmlns:controls="clr-namespace:Xaminals.Controls">
<Shell.SearchHandler>
<controls:MonkeySearchHandler Placeholder="Enter search term"
ShowsResults="true"
DisplayMemberName="Name" />
</Shell.SearchHandler>
...
</ContentPage>
这里有the official sample供参考,这需要一些时间进行研究。