【问题标题】:Use locator to manage multiple view-viewmodel pairs in Panorama Page使用定位器管理全景页面中的多个视图-视图模型对
【发布时间】:2012-06-16 07:36:11
【问题描述】:

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

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

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

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

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

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

有没有更好的解决方案?

【问题讨论】:

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


    【解决方案1】:

    如果您想在 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”属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多