2016-04-28 1 views
0

У меня есть сетка с 4 строками 2, содержащие датаариды. Я хочу показать/скрыть один datagrid на основе флажка ShowPackages. Код работает правильно и отображает/скрывает datagrid. Однако проблема заключается в том, что другой datagrid во второй строке не расширяется в доступное пространство.Grid/Datagrid, не расширяющийся в космос

Я понимаю, что это может быть связано с определением четырех строк и всего этого рендеринга в указанном пространстве. Как достичь требуемой функциональности?

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <StackPanel Orientation="Horizontal"> 
      <CheckBox Content="Show Completed" IsChecked="{Binding ShowCompletedCommand}" Margin="3"/> 
      <CheckBox Content="Show Packages" IsChecked="{Binding ShowPackages}" Margin="3"/> 
     </StackPanel>  
     <DataGrid Grid.Row="1" ItemsSource="{Binding WorkOrders}" SelectedValue="{Binding SelectedWorkOrder}" AutoGenerateColumns="True"/>   
     <DataGrid Grid.Row="2" Visibility="{Binding ShowPackages, Converter={StaticResource BoolToVis}}" ItemsSource="{Binding Packages}" /> 
     <Grid Grid.Row="3"> 
      <StackPanel Orientation="Horizontal"> 
       <Button Command="{Binding RefreshCommand}" Content="Refresh"/> 
       <Button Command="{Binding CancelCommand}" Content="Cancel"/> 
      </StackPanel> 
    </Grid> 

ответ

1

вторая высота RowDefinition должна быть автоматически:

<Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="auto"/> 
    <RowDefinition Height="Auto"/> 
</Grid.RowDefinitions> 

Edit. Этот подход должен работать

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition> 
      <RowDefinition.Style> 
       <Style TargetType="RowDefinition"> 
        <Setter Property="Height" Value="*"></Setter> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=PackagesCB, Path=IsChecked}" Value="False"> 
          <Setter Property="Height" Value="0" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </RowDefinition.Style> 
     </RowDefinition> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <StackPanel Orientation="Horizontal"> 
     <CheckBox Content="Show Completed" IsChecked="{Binding ShowCompletedCommand}" Margin="3"/> 
     <CheckBox x:Name="PackagesCB" Content="Show Packages" IsChecked="{Binding ShowPackages}" Margin="3"/> 
    </StackPanel> 
    <DataGrid Grid.Row="1" ItemsSource="{Binding WorkOrders}" SelectedValue="{Binding SelectedWorkOrder}" AutoGenerateColumns="True"/> 
    <DataGrid Grid.Row="2" ItemsSource="{Binding Packages}"/> 
    <Grid Grid.Row="3"> 
     <StackPanel Orientation="Horizontal"> 
      <Button Command="{Binding RefreshCommand}" Content="Refresh"/> 
      <Button Command="{Binding CancelCommand}" Content="Cancel"/> 
     </StackPanel> 
    </Grid> 
</Grid> 
+0

Это будет расти с содержанием данных. В основном я хотел, чтобы каждый datagrid был 1 * при проверке. Когда установлено, чтобы свернуть, другая сетка должна стать 2 * и заполнить пробел. –

+1

Я обновил свой ответ. Вам не нужен конвертер. – Amine

+0

Работает как сон, у меня была работа вокруг привязки высоты к ВМ, но это самодостаточно все в представлении, поэтому гораздо лучший вариант. Благодаря! –

0

Изменить на:

<Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
</Grid.RowDefinitions> 
+0

К сожалению, ничего другого. –