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

3

当我在Mvvm Light中使用具有多个构造函数的ViewModel时,我遇到了这个问题:

我有一个视图模型,它有一个空构造函数,然后我创建了第二个构造函数,接受一个参数(希望在某些情况下执行其他操作......)。 如果我尝试运行应用程序,我会得到以下错误:

无法注册:在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个回答

12

你可以在默认构造函数上加上PreferredConstructorAttribute来解决这个问题。


1
试过了,但每次有人调用那个视图模型时,都会调用那个构造函数...(在 ctor 的顶部加上 [PreferredConstructor] 似乎与 PreferredConstructorAttribute 相同...) - Noctis

-2

这个改变什么也没做:

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

是的,我也被阻塞了,但是Nitin的答案并没有解决问题。 "PreferredConstructor"属性没有改变任何东西。 我在Framework4上使用mvvm Light。 - david
那你本可以点赞我的评论,表示它并没有帮助 :) - Noctis
好的,但也许我漏掉了什么。这是为了推进对话。 - david
:) ...不确定添加没有回答问题的答案是否会推动它向前发展。老实说,这可能甚至不是新版本的问题。不过还是值得检查一下...我会试着在周末抽出一些时间来处理。 - Noctis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接