按照许多在线示例,我通过将处理程序附加到应用程序的搜索窗格,在Metro应用程序中实现了搜索:
public void DoSearch() {
var mySearchPane = SearchPane.GetForCurrentView();
if (null == mySearchPane) return;
mySearchPane.QuerySubmitted +=
new TypedEventHandler<SearchPane, SearchPaneQuerySubmittedEventArgs>(OnQuerySubmitted);
mySearchPane.Show();
}
private void OnQuerySubmitted(...) {
// ...blah, blah
}
问题:搜索结束后,最终是否需要删除QuerySubmitted事件的处理程序?如果必须删除它,那么如何在搜索完成后删除事件处理程序?
答案 0 :(得分:0)
看起来您正在连接特定的用户操作(如按钮单击)以启动搜索,包括连接到搜索事件。这不是正确的方法。
您希望在创建页面时调用SearchPane.GetForCurrentView
并挂钩QuerySubmitted
事件。用户可以随时调用Charm栏并执行搜索。如果我的假设是正确的,那么您的应用将无法处理该情况。
我想从UX打开搜索窗格(通常不是一个很好的用户体验练习),然后你想将mySearchPane设置为一个类变量,可以随时访问页面的其余部分并调用来自点击处理程序内部的mySearchPane.Show()
就像现在一样。
如果您以这种方式处理事情,则无需担心断开QuerySubmitted
处理程序,因为当您离开页面时将清理处理程序。