1

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

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

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

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

如果视图模型是通过调用Locator在运行时构建的,如何进行数据绑定?

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

有更好的解决方案吗?

4

1 回答 1

0

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

就个人而言,尽管对于这样的页面,我通常在定位器上放置一个视图模型工厂方法(因此它可以缓存它们等)并从 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”属性。

于 2012-08-04T01:21:47.707 回答