windows-runtime – Win 8.1 SearchBox – 绑定建议
发布时间:2020-12-14 02:03:52 所属栏目:Windows 来源:网络整理
导读:我们正在编写一个使用新的SearchBox XAML控件的 Windows 8.1 Store应用程序.它似乎是将建议输入下拉列表的唯一方法,因为用户键入的是使用SearchBoxSuggestionsRequestedEventArgs并从事件中获取SearchSuggestionCollection,然后将建议附加到该列表. 我们正在
我们正在编写一个使用新的SearchBox XAML控件的
Windows 8.1 Store应用程序.它似乎是将建议输入下拉列表的唯一方法,因为用户键入的是使用SearchBoxSuggestionsRequestedEventArgs并从事件中获取SearchSuggestionCollection,然后将建议附加到该列表.
我们正在使用Prism for WinRT,并希望将ViewBox和它的事件从获取建议字符串列表的ViewModel中分离出来. 我无法找到将字符串列表绑定到SearchSuggestionCollection或以编程方式添加它们的任何方式,这些方法不涉及使用事件args,这使得单元测试变得非常复杂. 有没有办法绑定/添加不涉及事件args的建议? 解决方法
好的,所以我对这个问题很着迷,这里是使用SearchBox的解决方案.我在
MSDN和
GitHub上传了一份完整的样本
简而言之,使用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:如何启动docker VM att系统启动
- Windows和Linux之间的Python Multiprocess差异
- 什么是* Mlick * UI库/框架/工具,非MFC,Win32 C应用程序?
- Windows TCP套接字recv延迟
- windows-server-2008-r2 – 在任务计划程序库中仅禁用一个任
- 命令行 – 在命令行上构建Windows 8 Phone应用程序
- windows-phone – Windows Phone 8 IconicTemplate Tile Im
- 在Windows 7上安装IIS8?
- 在Windows上安装PostgreSQL
- xaml – 绑定ListPicker.SelectedIndex问题
推荐文章
站长推荐
- 你如何在Windows中复制巨大的(数百万)目录树?
- Windows可以记录CryptoAPI CRL时序吗?
- 在Windows下,什么是流程“工作集”?
- OUTFILE与Microsoft SQL Server等效吗?
- 如何使用Microsoft Visual C 2008编译PHP扩展?
- entity-framework – 是否可以将Entity Framewor
- windows-sbs-2011 – 如何将AD帐户限制为仅限特定
- DirectX11--HR宏关于dxerr库的替代方案
- windows – 有关COM错误代码的最佳信息来源是什么
- windows-server-2003 – Windows Server 2003 –
热点阅读