2013-10-19 3 views
1

난 내 뷰 모델에 대한 DataTemplate을하고내 창 자원

<Window.Resources> 
     <DataTemplate DataType="{x:Type SharedViewModels:DatabaseViewModel}"> 
      <SharedViews:DatabaseView/> 
     </DataTemplate> 

     <LocalViewModels:SharedSettingsViewModel x:Key="SharedSettingsViewModel"/> 
</Window.Resources> 

DatabaseViewModel 내 정적 SharedSettingsViewModel 의 인스턴스 인 정적 mainviewmodel이 있고 난이 탭 컨트롤이

<TabControl DataContext="{Binding Source={StaticResource SharedSettingsViewModel}}" ItemsSource="{Binding SharedSettingsViewModelsTabList}"> 
         <TabControl.ItemTemplate> 
          <DataTemplate> 
           <ContentPresenter Content="{Binding Content}"/> 
          </DataTemplate> 
         </TabControl.ItemTemplate> 
        </TabControl> 

와 나는이

SharedSettingsViewModelTabList.Add(new Shared.Models.TabItem() { Header = "Sql Databases", Content = DatabaseViewModel }); 
처럼 내에서 TabControl itemssorce에 항목을 추가

내 의 데이터 접두어를 내 SharedSettingsViewModel 안에있는 DatabaseViewModel 인스턴스로 설정하는 방법은 무엇입니까? 내가

DataContext="{Binding DatabaseViewModel}" 

을 시도 사용자 컨트롤하지만이 나던 내보기 DatabaseView XAML에서

여기

이 될 것입니다 내 TabItem의 모델

public class TabItem : MVVM.ObservableObject 
    { 
     public string Header { get; set; } 
     public MVVM.ObservableObject Content { get; set; } 
    } 

내 DatabaseViewModel입니다 작동하는 것 SharedSettingsViewModel의 속성으로 정의 됨

private ObservableCollection<Models.Database> databases; 

public ObservableCollection<Models.Database> Databases 
     { 
      get 
      { 
       if (databases == null) 
       { 
        databases = new ObservableCollection<Models.Database>(); 
        databases.Add(new Models.Database() { Displayname = "new" }); 
       } 
       return databases; 
      } 
      set 
      { 
       SetField(ref databases, value, "Databases"); 
      } 
     } 

여기에는 탭 항목 수집

public class SharedSettingsViewModel : MVVM.ObservableObject 
    { 
    private ObservableCollection<Shared.Models.TabItem> SharedSettingsViewModelTabList; 
    public ObservableCollection<Shared.Models.TabItem> SharedSettingsViewModelTabList 
      { 
       get 
       { 
        if (sharedSettingsViewModelTabList == null) 
        { 
         sharedSettingsViewModelTabList = new ObservableCollection<Shared.Models.TabItem>(); 
        } 
        return sharedSettingsViewModelTabList; 
       } 

      } 

    //my DatabaseViewModel property..as a child view model 

      private Shared.ViewModels.DatabaseViewModel databaseViewModel; 
      public Shared.ViewModels.DatabaseViewModel DatabaseViewModel 
      { 
       get 
       { 
        if (databaseViewModel == null) 
        { 
         databaseViewModel = new Shared.ViewModels.DatabaseViewModel(); 
        } 
        return databaseViewModel; 
       } 
       set 
       { 
        SetField(ref databaseViewModel, value, "DatabaseViewModel"); 
       } 
      } 
} 
이 포함되어 내 SharedSettingsViewModel입니다

답변

1

당신은 다음과 같이 코드를 업데이트해야합니다 당신이 DatabaseViewModelContentDataTemplate하게 될 DatabaseViewDataContext 될 것 ContentPresenter in of TabControl

 <TabControlDataContext="{Binding Source={StaticResource SharedSettingsViewModel}}" ItemsSource="{Binding SharedSettingsViewModelsTabList}"> 
      <TabControl.ContentTemplate> 
        <DataTemplate> 
         <ContentPresenter Content="{Binding Content}"/> 
        </DataTemplate> 
      </TabControl.ContentTemplate> 
      <TabControl.ItemContainerStyle> 
       <Style TargetType="TabItem"> 
        <Setter Property="Header" Value="{Binding Header}"/> 
       </Style> 
      </TabControl.ItemContainerStyle> 
     </TabControl>