【问题标题】:How do you actually implement the Search Contract? (C#)您如何实际实施搜索合同? (C#)
【发布时间】:2012-11-07 06:56:43
【问题描述】:

我在理解和让搜索合同在我的商店应用中工作时遇到了一些问题。我一直找不到任何类型的文档或指南来解释使用合同的结构。 (我查看了 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 在静态方法中无效,但我认为我需要该方法是静态的?我的问题可能只是一个基本的逻辑错误?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 对不起,我应该提一下,我也做过这个,虽然我可以看到那个特定的例子是如何工作的,但我觉得它不是特别有用,主要是为了证明查询被处理它只是显示您在页面上键入的查询,而不是例如搜索结果页面上的一组示例结果。
      • 是的,这个示例有点精简......它的要点是使用 OnSearchActivated 导航到新的搜索结果页面,然后您在其中处理查询参数以到达 yo
      • [被切断了 :(] 是的,那个样本有点瘦......它的要点是使用 OnSearchActivated 导航到新的搜索结果页面,然后您在其中处理查询参数以获得您的结果,并以您喜欢的任何格式显示在结果页面中。Zubair 非常友好地分享了他的完整实现,希望这将填补空白。
      • 谢谢,我明白你的意思了。根据我已经完成的(如上所示),我认为我已经完成了这些步骤。就像我提到的,我能够获得我想要显示的列表,但我将其设置为DefaultViewModel 中的结果不起作用。我怀疑它是一种数据封装问题(一种访问变量或其他东西的方法),但我需要有人指出我正确的方向。
      【解决方案3】:

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

      【讨论】:

      • 感谢您向我展示您的代码。看到它让我很好地了解了它应该如何完成......但最令人失望的是,我确信我已经完成了填充结果列表的所有基本步骤,并将其设置为 DefaultViewModel["Results"] 你有!!我完全不知道该怎么做。
      猜你喜欢
      • 2011-03-13
      • 2015-05-22
      • 2010-12-17
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      相关资源
      最近更新 更多