C# 将多个构造函数与Mvvm light和ViewModelLocator一起使用时出现异常

C# 将多个构造函数与Mvvm light和ViewModelLocator一起使用时出现异常,c#,wpf,mvvm-light,C#,Wpf,Mvvm Light,当Mvvm Light中有一个具有多个构造函数的ViewModel时,我面临这个问题: 我有一个视图模型,它有一个空的ctor,然后我创建了第二个接收参数的ctor(在某些情况下想做其他事情…)。 如果我尝试运行该应用程序,我将获得: 无法注册:在内部\u VM中找到多个构造函数,但没有一个用PreferredConstructor标记 只有在定位器中注册视图模型时,才会发生这种情况: SimpleIoc.Default.Register<Inner_VM>(); 一切似乎都正常

当Mvvm Light中有一个具有多个构造函数的
ViewModel
时,我面临这个问题:

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

无法注册:在内部\u VM中找到多个构造函数,但没有一个用PreferredConstructor标记

只有在
定位器中注册
视图模型
时,才会发生这种情况:

SimpleIoc.Default.Register<Inner_VM>();
一切似乎都正常

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


欢迎提供任何帮助。

您可以在默认构造函数上添加
PreferredConstructorAttribute
,以解决此问题。

此更改没有:

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
公共类PreferredConstructorAttribute:继承属性
公共分新()
端接头
末级
公共类TBLFILTRESCHAMP
Public Sub New()'Le JsonToObject一个无参数的构造函数
items=新绑定列表(TBLFILTRECHAMP)()
端接头
公共次级新建(环境为SqiD23.Env)
我是新的
_环境=环境
端接头
末级

尝试过,但每次有人调用viewmodel时,就会调用该构造函数。。。([PreferredConstructor]位于ctor之上,似乎与PreferredConstructorAttribute相同…)是的,我也很臃肿,但Nitin的答案并不能解决问题。“PreferredConstructor”属性不会改变任何内容。我在Framework4上使用mvvm指示灯,这时你可以对我的评论进行投票,说它没有帮助:)好吧,但也许我遗漏了什么。这是为了推进对话:)。。。不确定添加不回答问题的答案是否会使问题向前发展。TBH,它甚至可能不是一个新版本的问题。不过值得一查。。。我会尽量在周末找点时间。。。
public Inner_VM Inner
{
    get { return new Inner_VM(); }
}
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