2012-01-07 15 views
1

我有一個DataGrid,它從TreeView的SelectedItem綁定其數據。如何隱藏DataGrid容器使用DataTrigger,如果它沒有項目

的問題是如何自動隱藏使用DataTrigger如果DataGrid中沒有項目網格容器?

<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 2012-01-07 07:02:13

2

您可以綁定到數據網格的HasItems屬性。但由於該屬性是一個布爾類型,並且Grid.Visibility是一個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 2012-01-07 07:11:31

+0

我想要[this](http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/ce51b1b7-dd83-4279-a6a9-656c2aa3924e) – ARZ 2012-01-07 09:13:48

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:

相關問題