【问题标题】:How can I get shell.searchandler to push its own text?如何让 shell.searchandler 推送自己的文本?
【发布时间】:2019-10-23 14:37:58
【问题描述】:

我正在尝试将文本从我的 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>

在我的视图模型中

    public ICommand PerformSearch => new Command<string>((string query) =>
    {
      //do work
    });

命令执行,但查询参数始终为空。

如何将输入到 searchandler 中的文本发布到绑定命令?

【问题讨论】:

  • 可以设置Query,。 Query="{Binding xxx,Mode=OneWayToSource}",并获取 ViewModel 中的值。

标签: xamarin xamarin.forms


【解决方案1】:

CommandParameter="{Binding Text, Source={x:Reference searchBar}}"

查看SearchHandler reference文件如下:

  • 查询,字符串类型,用户在搜索框中输入的文本。

原因是SearchHandler不包含Text属性。你应该把它替换为查询,然后它才能工作。

<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供参考,这个需要时间研究一下。

【讨论】:

  • 谢谢我对 Xamarin 还是很陌生,您是否会偶然知道一个资源,该资源显示了如何以 mvvm 样式使用自定义搜索处理程序?
  • @Jack Okey,我稍后会更新答案,更多详细信息是我的共享文档,
  • 根据答案,我可以在 ViewModel 中得到结果。但是搜索建议区域中没有显示结果。
  • github.com/xamarin/Xamarin.Forms/issues/5783 此问题已在此处发布。有人知道更新吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 2022-10-26
  • 2019-01-01
  • 1970-01-01
  • 2017-05-09
相关资源
最近更新 更多