Мне нужна помощь, и я надеюсь, что какая-то добрая душа сможет подсказать мне:)
Я создаю новое приложение, используя MVVM Light.В этом приложении, когда создается представление, оно создает соответствующий ViewModel с помощью импорта 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();
}
}
Теперь это работает, если я хочу открыть новое окно для создания нового контракта ... или, другими словами, это идеально, если мне не нужно передавать IDсуществующий контракт.
Однако давайте предположим, что я хочу использовать тот же вид для редактирования существующего контракта.В этом случае я бы добавил новый конструктор в тот же вид, который принимает либо идентификатор модели, либо объект модели.
«К сожалению» ViewModel создается всегда одинаково:
[Import(ViewModelTypes.ContractEditorViewModel)]
public object ViewModel
{
set
{
DataContext = value;
}
}
Насколько я знаю, это вызывает стандартный конструктор / без параметров соответствующего ViewModel в составе-время.
Так что я хотел бы знать, как дифференцировать это поведение?Как я могу вызвать определенный конструктор во время композиции?Или как я могу передать некоторые параметры во время импорта?
Я действительно извиняюсь, если этот вопрос звучит глупо, но я только недавно начал использовать MEF!
Заранее спасибо,
Приветствия, Джанлука.