2012-01-07 5 views
1

私は、そのデータをTreeViewのSelectedItemからバインドするデータグリッドを持っています。DataTriggerを使用してDataGridコンテナを非表示にする方法

データグリッドには何のアイテムを持っていない場合、問題がDataTriggerを使用して、グリッドコンテナどのように自動的に隠すのですか?

<Grid Name="grid1" Visibility="Visible"> 
     <DataGrid Name="datagrid1" ItemsSource="{Binding ElementName=treeview1, Path=SelectedItem}"/> 
    </Grid> 

私はこれが参考になると思います。link

答えて

0

ページの読み込み中に、コードの中のデータソースを確認してください。データソースが空である場合(条件に基づいて)、datagrid1.visible = falseを設定します。完全性のために、表示する価値のあるデータがある場合はtrueに設定してください。

+0

Qが更新されました! (XAMLで) – ARZ

2

データグリッドのHasItemsプロパティにバインドできます。しかし、そのプロパティはブール型でGrid.Visibilityは可視性列挙型なので、ブール値を列挙型に変換する必要があります。幸いにも、既にBooleanToVisibilityConverterと呼ばれるすぐに使えるコンバータがあります。

<Grid Name="grid1" Visibility="{Binding HasItems, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=datagrid1, Mode=OneWay}"> 

あなたはDataTriggerを使用したいが、あなたは可視性を変更するトランジションを適用する場合は、あなたがグリッドをスタイリングしてたときに可視性=目に見えるので、等のためのトリガーを追加することによって、そうすることができ、なぜわからない:

<Style x:Key="GridStyle1" TargetType="{x:Type Grid}"> 
     <Style.Resources> 
      <Storyboard x:Key="StoryboardShow"> 
       <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="{x:Null}"> 
        <EasingDoubleKeyFrame KeyTime="0" Value="0"/> 
        <EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/> 
       </DoubleAnimationUsingKeyFrames> 
      </Storyboard> 
      <Storyboard x:Key="StoryboardHide"> 
       <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="{x:Null}"> 
        <SplineDoubleKeyFrame KeyTime="0" Value="1"/> 
        <SplineDoubleKeyFrame KeyTime="0:0:1" Value="0"/> 
       </DoubleAnimationUsingKeyFrames> 
      </Storyboard> 
     </Style.Resources> 
     <Style.Triggers> 
      <Trigger Property="Visibility" Value="Visible"> 
       <Trigger.ExitActions> 
        <BeginStoryboard Storyboard="{StaticResource StoryboardHide}"/> 
       </Trigger.ExitActions> 
       <Trigger.EnterActions> 
        <BeginStoryboard Storyboard="{StaticResource StoryboardShow}"/> 
       </Trigger.EnterActions> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

次にグリッドにこのスタイルを適用します。

<Grid Name="grid1" Style="{DynamicResource GridStyle1}" Visibility="{Binding HasItems, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=datagrid1, Mode=OneWay}"> 
+0

この問題にDataTriggerを使用することについてのご意見はありますか? – ARZ

+0

私は[this]のようなものが必要です(http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/ce51b1b7-dd83-4279-a6a9-656c2aa3924e) – ARZ

3

このデータトリガは、私の仕事:

<Style TargetType="{x:Type DataGrid}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Items.Count, RelativeSource={RelativeSource Self}}" Value="0"> 
      <Setter Property="Visibility" Value="Collapsed" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
0
<Style TargetType="{x:Type DataGrid}">  
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGrid}"> 
       <Border Background="{TemplateBinding Background}" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      BorderThickness="2" 
      CornerRadius="1" 
      Padding="{TemplateBinding Padding}" 
      SnapsToDevicePixels="True"> 
        <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false"> 
         <Grid> 
          <ItemsPresenter x:Name="ScroItemsPresenter" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
          <TextBlock x:Name="Block" Text="asd"></TextBlock> 
         </Grid> 
        </ScrollViewer> 
       </Border> 
       <ControlTemplate.Triggers> 
        <DataTrigger Binding="{Binding HasItems, RelativeSource={RelativeSource Self}}" 
           Value="True"> 
         <Setter TargetName="Block" Property="Visibility" Value="Hidden"></Setter> 
         <Setter TargetName="ScroItemsPresenter" Property="Visibility" Value="Visible"></Setter> 
        </DataTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

HasItems: noItems:

関連する問題