MEF导入需要数据的ViewModel,以查看Silverlight

时间:2011-07-08 22:34:30

标签: silverlight parameters viewmodel mef

我不确定实现这一目标的最佳方法。这是我的观点:

public partial class MyPage : Page
{
    [Import]
    public MyVM ViewModel
    {
        get { return DataContext as MyVM ; }
        set { DataContext = value; }
    }

    public String EventName { get; set; }
    public MyPage()
    {
        InitializeComponent();
        CompositionInitializer.SatisfyImports(this);
    }

    // Executes when the user navigates to this page.
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {       }
}

我的VM:

[Export]
public class MyVM : ViewModelBase
{
    public MyVM ()
    {

    }
}

这很有效。但是,我需要从具有我的字符串的viewmodel或URL获取数据。无论哪种方式,我都不确定使用MEF将字符串传递给MyVW的最佳方法。 我认为我可以使用MVVMLight中的Messaging,但MyVM类尚未实例化以接收来自其他ViewModel的广播。所以我想好了,我会试试这个:

[Export]
public class MyVM : ViewModelBase
{
    public MyVM ([Import("hello")]string hello)
    {

    }
} 

然后把它放在视图中:

[Export("hello")]
public String MyHello { get; set; }

但这给了我一个错误。无法对“表单A”类型的对象调用SatisfyImports,因为它标记有一个或多个ExportAttributes。

那么实现这一目标的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

要在视图之间共享数据,我通常会将一个SharedData对象注入到我的ViewModels中。

 [Import(RequiredCreationPolicy = CreationPolicy.Shared)]
 public ISharedData SharedData { get; set; }

我也在使用Caliburn Micro框架,因此我不会通过URL查询字符串传递数据。按照惯例,CM将解析URL参数并将它们注入到VM上的属性中,但我不确定此功能是否仅适用于Windows Phone开发。

来自here

  

检查Page的QueryString。看   对于匹配的VM上的属性   QueryString参数和注入   他们,执行必要的类型   胁迫。

如果您想要将数据从视图传递到vm,那么应该通过数据绑定进行。