我是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。
有更好的解决方案吗?
答案 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”属性。