何时调用ViewModel.LoadData?

时间:2011-07-01 16:30:16

标签: silverlight windows-phone-7

我有一个WP7 Silverlight应用程序,它使用Pivot显示一堆数据。首次创建项目时,Visual Studio模板调用Page_Loaded中的ViewModel.LoadData:

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    App.ViewModel.LoadData();
}

然而on MSDN它表示你应该使用OnNavigatedTo而不是Page_Loaded,因为OnNavigatedTo只在页面变为活动时被调用一次,而每次将一个项目添加到页面的可视树时都会调用Page_Loaded。 MSDN文章适用于Silverlight 4,而不适用于Silverlight Windows Phone。

  

您重写OnNavigatedTo方法   检查导航请求和   准备页面以供显示。对于   例如,您可以加载请求的   数据并启用或禁用可视化   元素。

     

通常,您使用OnNavigatedTo   方法而不是创建事件   Loaded事件的处理程序。该   OnNavigatedTo方法更可取   因为它只被叫一次   每次页面变为活动状态。该   Silverlight框架提升了   每次元素加载事件   添加到可视树中,哪个   可能不止一次发生   激活页面时。该   调用OnNavigatedTo方法   每个请求,即使页面是   从缓存中检索。你应该   在此方法中包含必须的代码   相反,为每个请求执行   而不是将该代码放在页面中   构造

Visual Studio Pivot模板在Page_Loaded中调用ViewModel.LoadData是否有任何理由?

1 个答案:

答案 0 :(得分:2)

我认为你混淆了LayoutUpdated和Loaded 每次显示页面时,只应调用一次加载。

在构建该页面之后加载特定于页面的数据是处理绑定到特定页面的数据的简单方法。我的猜测是默认模板使用它,因为它易于理解和学习。

<强>更新
您引用的MSDN中的文章适用于Page.Loaded。 WP7不使用Page,而是使用PhoneApplicationpage 与WP7合作超过一年并创建了数十个应用程序,我从未在WP7应用程序中看到多次调用Loaded事件。