Изменить после уточнения:
Похоже, вы вообще не хотите использовать RegionManager, и это нормально. Тогда я хотел бы предложить следующее:
Создайте интерфейс для ваших модулей, чтобы использовать его для регистрации методов создания представлений:
public interface IViewRegistry
{
void RegisterMainView(Func<object> ViewCreationDelegate);
}
Ваши модули будут использовать это так:
public MyModule : IModule
{
IViewRegistry _registry;
public MyModule(IViewRegistry registry)
{
_registry = registry;
}
public void Initialize()
{
_registry.RegisterMainView(() =>
{
var vm = new MyViewModel();
var view = new MyView();
var view.DataContext = vm;
return view;
});
}
}
Затем в вашей оболочке вы сначала реализуете представление реестра (это упрощение ... вы, вероятно, захотите что-то более надежное)
public ViewRegistry : IViewRegistry
{
public static List<Func<object>> ViewFactories
{
get { return _viewFactories; }
}
static List<Func<object>> _viewFactories = new List<Func<object>>();
public void RegisterMainView(Func<object> viewFactory)
{
_viewFactories.Add(viewFactory);
}
}
И, наконец, вот как ваша оболочка будет показывать это. Вот сначала его ViewModel:
public ShellViewModel : ViewModel
{
public ObservableCollection<object> MainViews
{
...
}
public ShellViewModel()
{
MainViews = new ObservableCollection<object>(ViewRegistry.Select(factory => factory()));
}
}
А вот ваше мнение (смотри, ма, не RegionManager!):
<UserControl ...>
<Grid>
<ItemsControl ItemsSource="{Binding MainViews}" />
</Grid>
</UserControl>
Менеджер по регионам пытается дать вам все, что я здесь написал, плюс много точек расширения, но если вам не нравится RegionManager или вы обнаружите, что он по каким-то причинам не соответствует вашим потребностям, это как бы вы сделали это в Silverlight без него.
Дополнительные правки:
После еще одного комментария от OP, я думаю, что понимаю, что OP просто хочет показать представление в другом представлении без использования RegionManager. Похоже, что ОП использует RegionManager для отображения каждого представления на экране, что, вероятно, излишне.
Сценарий, который мне дали, включал в себя адресное представление и связанную ViewModel, используемую из другого родительского элемента управления. Вот что я делаю (правильно или неправильно):
<UserControl x:Class="Views.MyParentView" ...>
<StackPanel>
<TextBlock>Blah blah blah some other stuff... blah blah</TextBlock>
<myViews:AddressView DataContext="{Binding AddressVM}" />
</StackPanel>
</UserControl>
А вот родительская точка зрения viewModel:
public ParentViewModel : ViewModel
{
public AddressViewModel AddressVM
{
...
}
public ParentViewModel()
{
AddressVM = new AddressViewModel();
}
}
Вот и все. Это избавляет вас от необходимости слишком усердно работать, чтобы показать эти взгляды.
RegionManager действительно подходит для отделения представления родительского контейнера от подпредставления, но если оба они живут в одном и том же месте (один и тот же модуль / сборка), нет причин использовать RegionManager для отображения этих представлений.