2017-11-17 14 views
0

메뉴 및 메뉴 항목이있는 독 패널이있는 메인 윈도우에 스택 패널을 만들었습니다. 동일한 스택 패널에는 3 개의 사용자 컨트롤이 있습니다. 사용자가 메뉴 항목을 클릭 할 때 이러한 3 개의 사용자 컨트롤 중 하나만 표시해야하지만 숨겨진 사용자 컨트롤은 표시되지 않을 때 공간을 차지합니다. 메뉴와 하단에 내 눈에 보이는 사용자 컨트롤 사이 WPF의 메뉴 항목으로 사용자 컨트롤 표시/숨기기

enter image description here

는 공간을 차지 또 다른 숨겨진 사용자 컨트롤이 있습니다. 문제

스택 패널 :

사용자가 메뉴 항목을 클릭
<StackPanel> 
     <DockPanel> 
      <Menu DockPanel.Dock="Top"> 
       <MenuItem Header="Equipment"> 
        <MenuItem Header="_List" Click="mnuEquipList_Click" /> 
        <MenuItem Header="_Create" Click="mnuEquipCreate_Click" /> 
        <MenuItem Header="_Update" Click="mnuEquipUpdate_Click" /> 
       </MenuItem> 
       <MenuItem Header="_Exit" Click="mnuExit_Click" /> 
      </Menu> 
     </DockPanel> 
     <equipment:EquipmentCreateView Visibility="Hidden" x:Name="equipCreateView"></equipment:EquipmentCreateView> 
     <equipment:EquipmentListView DataContext="{Binding EquipmentListViewModel}" Visibility="Hidden" x:Name="equipListView"></equipment:EquipmentListView> 
     <equipment:EquipmentUpdateView Visibility="Hidden" x:Name="equipUpdateView"></equipment:EquipmentUpdateView> 
    </StackPanel> 

, 가시성 속성을 true와 false로 다른 사람으로 설정되어 있습니다. 이 기능을 구현하는 또 다른 방법이 있습니까?

+5

사용'Collapsed' – Shcherban

답변

1

간단한 방법 : 당신의 장비 조회수의

ViewModels는 공통 인터페이스에서 inhertance해야합니다 사용 대신에 "숨겨진"

더 나은 방법을 "축소". 사용자가 RelayCommands에 의해 버튼을 클릭하면

public class EquipmentCreateViewModel : IEquipment 
{ 
    //... 
} 

public class EquipmentListViewModel : IEquipment 
{ 
    //... 
} 

당신은 메인 뷰 모델에 속성이 ViewModels를 할당해야합니다.

public class MainViewModel 
{ 
    public IEquipment SelectedEquipment {get;set;} 
} 

주보기에서 DataTemplate을 선언해야합니다. MainView.xaml의

부품 :

<UserControl.Resources> 
     <ResourceDictionary>    
      <DataTemplate DataType="{x:Type equipment:EquipmentCreateViewModel}"> 
       <equipment:EquipmentCreateView /> 
      </DataTemplate> 
      <DataTemplate DataType="{x:Type equipment:EquipmentListViewModel}"> 
       <equipment:EquipmentListView /> 
      </DataTemplate> 
      <!--And so on-->    
     </ResourceDictionary> 
    </UserControl.Resources> 
대신 Hidden``의