wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了windows-runtime – Win 8.1 SearchBox – 绑定建议大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我们正在编写一个使用新的SearchBox XAML控件的 Windows 8.1 Store应用程序.它似乎是将建议输入下拉列表的唯一方法,因为用户键入的是使用SearchBoxSuggestionsRequestedEventArgs并从事件中获取SearchSuggestionCollection,然后将建议附加到该列表. 我们正在使用Prism for WinRT,并希望将ViewBox和
我们正在编写一个使用新的SearchBox XAML控件的 Windows 8.1 Store应用程序.它似乎是将建议输入下拉列表的唯一方法,因为用户键入的是使用SearchBoxSuggestionsRequestedEventArgs并从事件中获取SearchSuggestionCollection,然后将建议附加到该列表.

我们正在使用Prism for WinRT,并希望将ViewBox和它的事件从获取建议字符串列表的viewmodel中分离出来.

我无法找到将字符串列表绑定到SearchSuggestionCollection或以编程方式添加它们的任何方式,这些方法不涉及使用事件args,这使得单元测试变得非常复杂.

有没有办法绑定/添加不涉及事件args的建议?

解决方法

好的,所以我对这个问题很着迷,这里是使用SearchBox解决方案.我在 MSDNGitHub上传了一份完整的样本

简而言之,使用Behavior SDK和InvokeCommand,然后使用转换器通过使用新属性InputConvert和InputConverterParameter来获取所需的任何数据.

XAML:

<SearchBox SearchHistoryEnabled="False" x:Name="SearchBox" Width="500" Height="50">
        <SearchBox.Resources>
            <local:SearchArgsConverter x:Name="ArgsConverter"/>
        </SearchBox.Resources>
        <interactivity:Interaction.Behaviors>
            <core:EventTriggerBehavior EventName="SuggestionsRequested">
                <core:InvokeCommandAction
                    Command="{Binding SuggestionRequest}"
                    InputConverter="{StaticResource ArgsConverter}"
                    InputConverterLanguage="en-US"
                    InputConverterParameter="{Binding ElementName=SearchBox,Path=SearchHistoryEnabled}"/>
            </core:EventTriggerBehavior>
        </interactivity:Interaction.Behaviors>
    </SearchBox>

转换器:

public sealed class SearchArgsConverter : IValueConverter
{
    public object Convert(object value,Type targetType,object parameter,string language)
    {
        var args = (SearchBoxSuggestionsRequestedEventArgs)value;
        var displayHistory = (bool)parameter;

        if (args == null) return value;
        ISuggestionQuery item = new SuggestionQuery(args.Request,args.QueryText)
        {
            DisplayHistory = displayHistory
        };
        return item;
    }

    public object ConvertBack(object value,string language)
    {
        return value;
    }
}

Mainpade代码隐藏 – 当然你想要在VM中:)

public sealed partial class MainPage
{
    public DelegateCommand<string> Search { get; set; }
    public DelegateCommand<ISuggestionQuery> SuggestionRequest { get; set; }

    public MainPage()
    {
        InitializeComponent();
        Search = new DelegateCommand<string>(SearchedFor,o => true);
        SuggestionRequest = new DelegateCommand<ISuggestionQuery>(SuggestionRequestFor,o => true);

        DataContext = this;
    }

    private void SuggestionRequestFor(ISuggestionQuery query)
    {
        IEnumerable<string> filteredQuery = _data
            .Where(suggestion => suggestion.StartsWith(query.QueryText,StringComparison.CurrentCultureIgnoreCase));
        query.Request.SearchSuggestionCollection.AppendQuerySuggestions(filteredQuery);
    }

    private readonly string[] _data = { "Banana","Apple","Meat","Ham" };

    private void SearchedFor(string queryText)
    {
    }
}

我在博客上写了一篇完整的文章,但以上就是你真正需要的:)

大佬总结

以上是大佬教程为你收集整理的windows-runtime – Win 8.1 SearchBox – 绑定建议全部内容,希望文章能够帮你解决windows-runtime – Win 8.1 SearchBox – 绑定建议所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: