2015-01-19 1 views
0

건물의 열린 창과 닫힌 창을 표시하는 주된 목적으로이 트리 뷰가 있습니다. 현재 클래스는 "floor"로, 룸 목록, 창 목록이있는 "rooms"및 "roomwindow"클래스를 포함합니다.가치에 따라 treeview 항목을 제거하는 방법은 무엇입니까?

roomwindow 클래스의 "isOpen"부울 값을 기준으로 해당 라디오 버튼을 선택하여 열린 창, 닫힌 창 또는 모든 창을 표시하려고합니다.

방 창문의 부울 값에 따라 "창"트리보기 항목을 임시로 숨기거나 제거 할 수있는 방법이 있습니까? 방 창 목록을 반복하고 창을 삭제할 수있는 유일한 방법은 무엇입니까?

WindowCheck.xaml.cs 테스트 건물 초기화

<Window x:Class="WpfApplication3.WindowCheck" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfApplication3" 
    Title="WindowCheck" Height="350" Width="525" x:Name= "WindowCheckWindow"> 

<Grid Margin="104,113,60,0"> 
    <Grid.Resources> 
     <local:BoolToVisibleOrHidden x:Key="BoolToVisConverter" Reverse="False"/> 
     <local:BoolToVisibleOrHidden x:Key="BoolToVisConverterReverse" Reverse="True"/>   
    </Grid.Resources> 

    <RadioButton x:Name="rdbtn_open" Content="Open windows" HorizontalAlignment="Left" Height="43" Margin="99,-79,0,0" VerticalAlignment="Top" Width="118"/> 
    <RadioButton x:Name="rdbtn_closed" Content="Closed windows" HorizontalAlignment="Left" Height="43" Margin="256,-79,-30,0" VerticalAlignment="Top" Width="127" /> 
    <RadioButton x:Name="rdbtn_all" Content="All windows" HorizontalAlignment="Left" Margin="-55,-79,0,0" VerticalAlignment="Top" Height="33" Width="96"/> 

    <TreeView ItemsSource="{Binding FloorList, ElementName=WindowCheckWindow, Mode=TwoWay}"> 
     <!--RoomTemplate--> 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding RoomList}"> 
       <TextBlock Text="{Binding FloorId}"/> 
       <HierarchicalDataTemplate.ItemTemplate> 
        <HierarchicalDataTemplate ItemsSource="{Binding RoomWindowList}"> 
         <TextBlock Text="{Binding RoomId}" /> 

         <!--Window--> 
         <HierarchicalDataTemplate.ItemTemplate> 
          <DataTemplate > 
           <TextBlock Text="{Binding WindowId}" > 
            <TextBlock.Style> 
             <Style> 
              <Style.Triggers> 
               <DataTrigger Binding="{Binding IsChecked, ElementName=rdbtn_closed}" Value="True"> 
                <Setter Property= "TextBlock.Visibility" Value="{Binding Path= IsOpen, Converter={StaticResource BoolToVisConverter}}" /> 
               </DataTrigger> 
               <DataTrigger Binding="{Binding IsChecked, ElementName=rdbtn_open}" Value="True"> 
                <Setter Property="TextBlock.Visibility" Value="{Binding Path=IsOpen,Converter={StaticResource BoolToVisConverterReverse}}" /> 
               </DataTrigger> 
               <DataTrigger Binding="{Binding IsChecked, ElementName=rdbtn_all}" Value="True"> 
                <Setter Property="TextBlock.Visibility" Value="Visible"/> 
               </DataTrigger> 
              </Style.Triggers> 
             </Style> 
            </TextBlock.Style> 
           </TextBlock> 
          </DataTemplate> 
         </HierarchicalDataTemplate.ItemTemplate> 
        </HierarchicalDataTemplate> 
       </HierarchicalDataTemplate.ItemTemplate> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
     <TreeView.ItemContainerStyle> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <Style.Triggers> 
        <DataTrigger Binding ="{ Binding IsOpen}" Value="True"> 
         <Setter Property="Background" Value="Salmon"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding IsOpen}" Value="False"> 
         <Setter Property="Background" Value="GreenYellow"> 
         </Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
      </TreeView.ItemContainerStyle> 
    </TreeView> 
</Grid> 

MainWindow.xaml.cs를, :

public partial class MainWindow : Window 
{ 
    private Floor floor; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     InitializeBuilding(); 
    } 

    public void InitializeBuilding() 
    { 
     floor = new Floor("FirstFloor"); 

     List<RoomWindow> bathroomWindows = new List<RoomWindow>(); 
     bathroomWindows.Add(new RoomWindow("Bathroom window 1", false)); 
     //etc. 

     List<RoomWindow> livingroomWindows = new List<RoomWindow>(); 
    livingroomWindows.Add(new RoomWindow("Livingroom window 1", false)); 
    //etc. 

    Room livingRoom = new Room("Livingroom",livingroomWindows,floor); 
    Room bathRoom = new Room("Bathroom",bathroomWindows,floor); 

    floor.addRooms(livingRoom); 
    floor.addRooms(bathRoom); 
    } 
    //... 
+0

컬렉션의 하위 집합을 사용하여이를 'ItemsSource' 속성에 할당 할 수 있습니까? 예 : 열린 창만의 서브 세트를 선택하여 지정할 수 있습니다. – theMayer

+0

당신이 TreeViewItem.IsVisible을 IsOpen에 바인드하고 싶다. –

+0

@devhedgehog 그렇다면 BooleanToVisibilityConverter와 같은 것을 의미할까요? – Sarasa

답변

0

나는 사용자 정의 BooleanToVisibilityConverter, 가죽 추가 "isOpen"의 불리언 값에 근거하는 윈도우. 이것은 단 하나의 문제로 잘 작동하는 것 같습니다. 이제 창 항목 중 일부가 접 히면 항목이 있던 빈 공간이 생깁니다.