【问题标题】:Windows Phone 8 : How to load content for each pivot item using MVVM?Windows Phone 8:如何使用 MVVM 为每个数据透视项目加载内容?
【发布时间】:2026-02-18 11:30:01
【问题描述】:

我在我的应用程序中使用 Pivot Control。我想通过远程 url 加载每个数据透视项目的内容(即使用 Web 服务)。

例如 - 我有一个详细的食谱数据透视页面。它有 3 个枢轴项目 - 信息、评论、画廊。它在系统托盘上有进度指示器。

我想加载每个数据透视项目的数据一次,即如果用户滑回之前加载的数据透视项目,那么它不应该再次对该数据透视项目发出网络请求,并且在这种情况下进度指示器应该是不可见的。

我应该为每个数据透视项目使用不同的 ViewModel 还是为所有数据使用单个 MainViewModel?

如何管理 Pivot 页面中进度指示器的可见性?

我应该为每个 Pivot 项创建 UserControl 吗?

【问题讨论】:

    标签: c# windows-phone-8 mvvm viewmodellocator progress-indicator


    【解决方案1】:

    页面的作用是显示一个“实体”的数据,即配方。因此,我将只使用一个 RecipeViewModel,也不会费心为 Pivot 项创建 UserControl。

    您可以使用绑定来管理 ProgressIndicator。我个人使用从 PhoneApplicationPage 继承的 BasePage,我在后面的代码中创建绑定,例如:

    if (SystemTray.ProgressIndicator == null)
    {
        var indicator = new ProgressIndicator { IsIndeterminate = true };
        var visibilityBinding = new Binding("ProgressBarIsActive");
        BindingOperations.SetBinding(indicator, ProgressIndicator.IsVisibleProperty, visibilityBinding);        
        SystemTray.SetProgressIndicator(this, indicator);
    

    }

    有了这个,你只需要在你的 ViewModel 上切换 ProgressBarIsActive 属性。

    只有当枢轴项目是独立的(例如:食谱列表、联系信息、关于一个枢轴)时,我才会对枢轴项目使用不同的 ViewModel。

    【讨论】:

    • 感谢您的回答
    最近更新 更多