我在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.和谷歌这个问题之后)。
欢迎任何帮助。
答案 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