2015-08-29 2 views
0

Вот как я определил TabControl:Вводят просмотр в TabControl с помощью призмы библиотеки

<TabControl ItemsSource="{Binding OpenedProjects, UpdateSourceTrigger=PropertyChanged}" 
      SelectedItem="{Binding SelectedProject, Mode=OneWay}"> 
    <!-- headers --> 
    <!-- header definition is unimportant for this question --> 

    <!-- content --> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <local:ProjectView /> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

И эти два метода, которые я определил в своем классе модулей, которые используются для регистрации и использования просмотров:

protected override void _initializeViews() { 
    _container.RegisterType<MainMenuView>(); 
    _container.RegisterType<ProjectsView>(); 
    _container.RegisterType<ProjectView>(); 
    _container.RegisterType<ContentView>(); 
} 

protected override void _initializeRegions() { 
    IRegion menuRegion = _regionManager.Regions[RegionNames.MainMenuRegion]; 
    IRegion projectsRegion = _regionManager.Regions[RegionNames.ProjectsRegion]; 
    IRegion contentRegion = _regionManager.Regions[RegionNames.ContentRegion]; 

    menuRegion.Add(_container.Resolve<MainMenuView>()); 
    projectsRegion.Add(_container.Resolve<ProjectsView>()); 
    contentRegion.Add(_container.Resolve<ContentView>()); 
} 

И Посмотреть конструктор:

public ProjectView(ProjectsViewModel vm) { 
    InitializeComponent(); 
    DataContext = vm; 
} 

То, что я хочу добиться того, чтобы Инджа ct ProjectView в область содержимого TabControl. Очевидно, что в настоящее время это не работает из-за аргумента ViewModel в указанном выше конструкторе. Как я могу создать эту функциональность, путь PRISM?

EDIT:

Я нашел это: How to inject views into TabControl using Prism? Однако, если я делаю то же самое, как автор этого вопроса, я получаю:

System.InvalidOperationException: ItemsControl's ItemsSource property is not empty.

ответ

0

Вы TabControl не имеют область поэтому вы не можете вводить что-то в свой TabControl. В противном случае вы просто используете простой MVVM, чтобы вставить что-то в свой вид.

Чтобы использовать Призму, чтобы ввести что-то в свой TabControl. Вам нужна только следующая строка:

<TabControl prism:RegionManager.RegionName="TabRegion"/> 

И тогда вы можете вставить что-то очень простое в ваш вид.

_regionManager.RequestNavigate("TabRegion", new Uri("ProjectView", UriKind.Relative)); 

Перед тем, что вы должны добавить вид к вашему Containier с:

UnityContainer.RegisterType<object, ProjectView>("ProjectView"); 

Чтобы добавить HeaderText вы можете легко изменили стиль TabItem и связать заголовок с ViewModel от ProjectView :

<UserControl.Resources> 
    <Style TargetType="TabItem"> 
     <Setter Property="Header" Value="{Binding DataContext.Name}" /> 
    </Style> 
</UserControl.Resources> 

Я надеюсь, что это ответ, который вы ищете ^^

Смежные вопросы