你如何实际实施搜索合同? (C#)

时间:2012-11-02 12:42:47

标签: c# search windows-8 windows-store-apps

我在理解并让搜索合同在我的商店应用中运行时遇到了一些麻烦。我一直无法找到任何解释使用合同结构的文档或指南。 (我已经查看了MSDN上的快速入门,搜索合同示例和构建视频,但这只是真正处理javascript)

到目前为止,我已经能够运行查询并将一个(自定义对象)列表放入我的搜索合同页面,并从那里尝试将其分配给defaultviewmodel.results,但无论我查询什么查询在页面上显示我。还有其他我需要设置的东西吗? 到目前为止我所拥有的内容如下(摘录):

App.xaml.cs

protected override void OnSearchActivated(Windows.ApplicationModel.Activation.SearchActivatedEventArgs args)
        {
            SearchCharmResultsPage.Activate(args.QueryText, args.PreviousExecutionState);
            SearchCharmResultsPage.ProcessSearchQuery(args.QueryText);
        }    


public async static void ProcessSearchQuery(string queryString)
        {
            try
            {
                StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("recipeCustomObject                  Debug.WriteLine("Database exists, connecting");
                SQLiteAsyncConnection connection = new SQLiteAsyncConnection("CustomObject_db");
                List<CustomObject> resultsList = new List<CustomObject>();
                string query = "SELECT * FROM CustomObjectDB";
                resultsList =  await connection.QueryAsync<RecipeRecord>(query);  
            }
            catch (FileNotFoundException fnfExc)
            {
                Debug.WriteLine("FNFEXC: " + fnfExc.ToString());
            }
        }

我认为这可能存在问题,但我不确定它是否存在,或者如何改变它。 resultsList列表是在这里创建的,但由于它是异步的方法,我无法从方法返回。因此,我猜想当我尝试在LoadStateMethod中分配this.DefaultViewModel[Results] = resultsList;时,该对象不存在(认为程序没有抛出错误)。当我尝试在ProcessSearchQuery方法中添加相同的行时,我被告知this在静态方法中无效,但我认为我需要该方法是静态的?我的问题可能只是一个基本的逻辑错误?

3 个答案:

答案 0 :(得分:3)

终于搞定了!在这里找到了解决方案:http://jeffblankenburg.com/2012/11/06/31-days-of-windows-8-day-6-search-contract

对于那些在将来寻找答案的人来说,关键是要确保你的搜索逻辑在Filter_SelectionChanged方法中,这是我没有做的事情。请查看上述链接中的指南,了解结构。

答案 1 :(得分:2)

你看过开发者中心的Search contract sample了吗?那里还有一个C#/ XAML版本。

答案 2 :(得分:0)

我的开源Win8 RSS阅读器框架实现搜索(和分享)查看源代码,如果您仍有疑问,我将很乐意帮助http://win8rssreader.codeplex.com/

相关问题