Как параметризовать импорт в представлении? - PullRequest
2 голосов
/ 07 июня 2010

Мне нужна помощь, и я надеюсь, что какая-то добрая душа сможет подсказать мне:)

Я создаю новое приложение, используя 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!

Заранее спасибо,

Приветствия, Джанлука.

1 Ответ

0 голосов
/ 01 июля 2010

Вы МОЖЕТЕ сделать это.Ознакомьтесь с реализацией Messenger в MVVM-Light.Вы можете передать NotificationMessage (Of Integer) , чтобы отправить правильный идентификатор в модель представления.Модель представления должна зарегистрироваться для этого типа сообщения и загрузить его при отправке сообщения.

MEF Импорт по умолчанию имеет только конструктор без параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...