【发布时间】:2014-10-01 18:17:48
【问题描述】:
我需要将 id 传递给我的 viewmodel 构造函数。这个 id 是外部的,它被传递到包含 silverlight 应用程序的网页。我正在使用 MVVM Light 框架。 我看过几篇关于将参数传递给视图模型的文章,但在所有这些文章中,参数都是全局的,或者可以在没有参数的情况下实例化。 在我的情况下,我的视图模型的构造函数中需要一个 GUID id,它是从另一个应用程序传递的。
编辑:
这是定位器的代码:
public class ViewModelLocator
{
public static IUnityContainer Container
{
get;
private set;
}
/// <summary>
/// Initializes a new instance of the ViewModelLocator class.
/// </summary>
public ViewModelLocator(Guid id)
{
Container = new UnityContainer();
}
/// <summary>
/// Cleans up all the resources.
/// </summary>
public static void Cleanup()
{
Container.Resolve<CautelaVM>().Cleanup();
}
#region Cautela Inventário
public CautelaVM CautelaInventario
{
get
{
return Container.Resolve<CautelaVM>();
}
}
#endregion
}
定位器在视图中传递给 DataContext,如下所示:
DataContext="{Binding Source={StaticResource Locator}
编辑 2:
现在可以了。这是我在视图 ctor 中添加的代码,用于注册要在 VM ctor 中使用的 GUID:
ViewModel.ViewModelLocator.Container.RegisterType<CautelaVM>(new InjectionConstructor(id));
【问题讨论】:
-
为什么不能使用属性注入?
-
我不知道该怎么做。你能为我指出正确的方向吗?我在 silverlight 和/或 MVVM 方面不是很有经验。
-
与 mvvm 无关。您首先构造对象,然后使用属性或 Initialize(Guid) 方法设置 guid
-
@dan 和你的见解我一直在调查这件事,这就是我目前所处的位置。我的视图模型具有 Id 属性,并且我还有一个设置 Id 的 RelayCommand。现在我正在尝试将此命令绑定到视图的 onload,以便它在加载时设置视图模型的 id。我想这就是你指向我的地方。现在的问题是如何将参数传递给RelayCommand。参数 id 来自包含 silverlight 的网页。如何从视图中获取 id 到视图模型,仍然完全解耦?
-
我的回答呢?
标签: mvvm silverlight-4.0 mvvm-light