То, что у вас есть, имеет смысл, и в обоих случаях это подход View-first к созданию модели представления. То есть представление создает ViewModel. В исходном примере модель представления создается вне представления (и иногда упоминается как шаблон брака ), но, насколько мне известно, это то же самое - создание представления создает модель представления.
Если это соответствует вашим потребностям, придерживайтесь этого. Другой подход, на который вы можете обратить внимание, - это сначала ViewModel, где viewmodel берет зависимость от вида следующим образом:
//In the bare-bones(i.e. no WPF dependencies) common interface assembly
interfac IView {
void ApplyViewModel(object viewmodel);
}
interface IMainView : IView {
//this interface can actually be empty.
//It's only used to map to implementation.
}
//In the ViewModel assembly
class MainViewModel {
public MainViewModel(IMainView view) {
view.ApplyViewModel(this);
}
}
public partial class MainView : UserControl, IMainView {
void ApplyViewModel(object viewmodel){
DataContext = viewmodel;
}
}
Тогда вы можете добавить это представление так:
IRegion region = regionManager.Regions["MainRegion"];
//This might look strange as we are resolving the class to itself, not an interface to the class
//This is OK, we want to take advantage of the DI container
//to resolve the viewmodel's dependencies for us,
//not just to resolve an interface to the class.
MainViewModel mainViewModel = container.Resolve<MainViewModel>();
region.Add(mainViewModel.View, "MainView");
region.Activate(ordersView.View);