Я ищу помощи, и я надеюсь, что какая-то добрая душа сможет дать мне подсказку :)
Я создаю новое приложение, используя MVVM Light. В этом приложении при создании представления создается экземпляр соответствующей модели представления с помощью импорта MEF.
Вот код:
public partial class ContractEditorView : Window
{
public ContractEditorView ()
{
InitializeComponent();
CompositionInitializer.SatisfyImports(this);
}
[Import(ViewModelTypes.ContractEditorViewModel)]
public object ViewModel
{
set
{
DataContext = value;
}
}
}
А вот экспорт для ViewModel:
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export(ViewModelTypes.ContractEditorViewModel)]
public class ContractEditorViewModel: ViewModelBase
{
public ContractEditorViewModel()
{
_contract = new Models.Contract();
}
}
Теперь это работает, если я хочу открыть новое окно, чтобы создать новый контракт... или, другими словами, это идеально, если мне не нужно передавать идентификатор существующего контракта.
Однако предположим, что я хочу использовать тот же вид для редактирования существующего контракта. В этом случае я бы добавил в тот же вид новый конструктор, который принимает либо идентификатор модели, либо объект модели.
«К сожалению», ViewModel создается всегда одинаково:
[Import(ViewModelTypes.ContractEditorViewModel)]
public object ViewModel
{
set
{
DataContext = value;
}
}
Насколько я знаю, это вызывает конструктор стандарта/без параметров соответствующей ViewModel во время композиции.
Так что я хотел бы знать, как дифференцировать это поведение? Как я могу вызвать конкретный конструктор во время композиции? Или как я могу передать некоторые параметры во время импорта?
Я очень извиняюсь, если этот вопрос звучит глупо, но я только недавно начал использовать MEF!
Заранее спасибо,
Здоровья, Джанлука.