使用定位器管理Panorama页面中的多个视图 - 视图模型对

时间:2012-06-16 07:36:11

标签: wcf windows-phone-7 mvvm viewmodel mvvm-light

我是Silverlight / MVVM的新手。我尝试了一些MVVM Light的例子,它看起来很棒。

对于我的场景,我想为每个Panorama项目创建一个Panorama页面,显示我的usercontrol,一个客户的项目列表。

我已经构建了usercontrol(view),viewmodel和WCF服务模型,并且可以在单个Panorama项目中使用(仅使用第一个客户)。 另外,我使用MIX10演示中显示的MVVM Light定位器,它使我能够为Expression Blend制作设计时数据。

我的viewmodel将收到客户ID参数,然后根据此ID与WCF交换数据。 客户名单也来自WCF。所以我实际上无法在Locator的静态构造函数中创建视图模型。

如果通过调用Locator在运行时构建viewmodel,那么如何进行数据绑定?

我想到的唯一方法是在usercontrol的构造函数中创建viewmodel对象并使其成为datacontext。

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果要在XAML中保留相同的声明性模型,可以在定位器上放置CurrentCustomerViewModel属性,然后在导航到页面之前将属性设置为右视图模型。

就个人而言,我通常会在定位器上放置一个viewmodel工厂方法(因此它可以缓存它们等)并从OnNavigatedTo方法调用它,就像这样。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    string id = NavigationContext.QueryString["customerID"];
    vm = ViewModelLocator.GetCustomerViewModel(id);
    DataContext = vm;
    base.OnNavigatedTo(e);
}

然后我只使用Blend的样本数据功能来设计时间数据。这种方式也有助于支持将页面固定到开始屏幕,因为这将是应用程序的入口点,无论如何我都不一定很有可能设置“CurrentCustomerVM”属性。