使用具有Mvvm light和ViewModelLocator的多个构造函数时出现异常

时间:2013-09-26 05:38:52

标签: c# wpf mvvm-light

我在Mvvm Light中拥有一个带有多个构造函数的ViewModel时遇到此问题:

我有一个具有空ctor的视图模型,然后我创建了第二个接收参数的模型(在某些情况下想要做其他事情......)。 如果我尝试运行应用程序,我会得到:

无法注册:在Inner_VM中找到多个构造函数但没有使用PreferredConstructor标记。

仅当我在ViewModel注册Locator时才会发生这种情况:

SimpleIoc.Default.Register<Inner_VM>();

然后在属性中使用它:

public Inner_VM Inner
{
    get { return ServiceLocator.Current.GetInstance<Inner_VM>(); }
}

如果我省略ViewModel的注册,然后在属性中使用它:

public Inner_VM Inner
{
    get { return new Inner_VM(); }
}
一切似乎都有效......

我认为第一个选项是使用正在重用的静态实例,第二个选项只是在每次使用它时创建一个新实例。 (这在我的应用程序中并不重要,但是我试图理解为什么,并且找不到任何解释它,即使在搜索S.O.和谷歌这个问题之后)。

欢迎任何帮助。

2 个答案:

答案 0 :(得分:8)

您可以将PreferredConstructorAttribute放在Default构造函数上以解决此问题。

答案 1 :(得分:-1)

这没有任何改变:

Public Class PreferredConstructorAttribute : Inherits Attribute
    Public Sub New()
    End Sub
End Class

Public Class tblFiltresChamps
    Public Sub New() ' Le JsonToObject a besoin d'un constructeur sans paramètres
        items = New BindingList(Of tblFiltreChamps)()
    End Sub
    <PreferredConstructor>
    Public Sub New(Env As SqiD23.Env)
        Me.New()
        _Env = Env
    End Sub
End Class