我不确定实现这一目标的最佳方法。这是我的观点:
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。
那么实现这一目标的最佳方式是什么?
答案 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,那么应该通过数据绑定进行。