[Export]
public sealed class MainViewModel : NotificationObject
{
[Import]
public ISomeService MyService { get; private set; }
...
}
Чтобы ВСТАВИТЬ этот класс в DataContext для моего View, я должен пометить его как Export, чтобы MEF создал его экземпляр в каталоге. Проблема в том, что главное окно должно создавать другие окна и передавать заказы, я не уверен, как это сделать, не нарушая подход MVVM.
Я полагаю, что ICommand
вызовет что-то на моей MainViewModel, чтобы сгенерировать новую ViewModel, но после этого я не могу действительно заставить новое окно (представление) открыться из ViewModel. Кроме того, я даже не могу создать новую ViewModel из моей MainViewModel, потому что тогда MEF действительно не будет работать, верно?
[Export]
public sealed class MainViewModel : NotificationObject
{
[Import]
public ISomeService MyService { get; private set; }
private ObservableCollection<IOrderViewModel> Orders { get; set; }
public void OpenOrder(int id)
{
//Pseudo-code to ensure that duplicate orders are not opened)
//Else create/open the new order
var order = new OrderViewModel(id);
OpenOrders.Add(order);
}
}
2 проблемы здесь:
- Поскольку я "обновил", сервисы OrderViewModel не загружаются автоматически через MEF.
- Как этот код на моем слое ViewModel (соответствующий слой) создает необходимое представление в качестве НОВОГО ОКНА (дочернего элемента основного окна), а затем связывает этот новый OrderViewModel как DataContext?