1

我在理解和让搜索合同在我的商店应用程序中工作时遇到了一些麻烦。我一直找不到任何类型的文档或指南来解释使用合同的结构。(我查看了 MSDN 上的快速入门、搜索合同示例和构建视频,但这仅涉及 javascript)

到目前为止,我已经能够运行查询并在我的搜索合同页面中获取(自定义对象)列表,然后我尝试将其分配给 defaultviewmodel.results,但无论我输入什么查询,我都没有显示在页面上。还有什么我需要设置的吗?到目前为止,我所拥有的如下(摘录):

应用程序.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 列表是在这里创建的,但是因为它的方法是异步的,所以我无法从该方法返回。因此,我猜测当我尝试this.DefaultViewModel[Results] = resultsList;在 LoadStateMethod 中分配时,该对象不存在(认为程序不会引发错误)。当我尝试在ProcessSearchQuery方法中添加同一行时,我被告知这this在静态方法中无效,但我认为我需要该方法是静态的?我的问题可能只是一个基本的逻辑错误?

4

3 回答 3

3

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

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

于 2012-11-06T22:56:43.910 回答
2

你看过开发者中心的搜索合同样本吗?那里也有一个 C#/XAML 版本。

于 2012-11-02T12:49:18.813 回答
0

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

于 2012-11-02T13:25:38.320 回答