2013-09-26 2 views
2

Я столкнулся с этой проблемой при имея ViewModel с несколькими конструкторами в MVVM Light:Исключения при использовании нескольких конструкторов с MVVM светом и ViewModelLocator

У меня есть модель представления, которая имеет пустое 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. & google).

Любая помощь будет приветствоваться.

ответ

8

вы можете поставить PreferredConstructorAttribute на свой конструктор по умолчанию, чтобы решить эту проблему.

+0

Пытался, но затем каждый раз, когда кто-то называет это ViewModel, что конструктор вызывается ... ([PreferredConstructor] на вершине CTOR, кажется, так же, как PreferredConstructorAttribute ...) – Noctis

-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 
+0

??? что вы отвечаете ??? или вы отвечаете на Nitin? – Noctis

+0

Да, я тоже краснею, но ответ Нитина не решает проблему. атрибут «PreferredConstructor» ничего не меняет. Я использую mvvm Light on Framework4 – david

+0

, тогда вы могли бы просто поддержать мой комментарий, говоря, что это не помогает :) – Noctis

Смежные вопросы