网格内部的WPF边框列跨度导致UI冻结,为什么?

时间:2017-07-09 14:44:13

标签: wpf xaml datagrid wpf-controls

我遇到了缓慢数据绑定的问题,因为边界跨越了两列,我无法弄清楚原因。如果我将边框更改为仅驻留在第一列中,则datagrid数据绑定几乎是即时的。请参阅下面的代码。

它与网格中设置为*的第二列宽度有关,因为当我将其更改为Auto时它将正常工作,但我希望第二个数据网格填充剩余的空白空间(I' m在另一个View的TabControl中使用此UserControl)

<UserControl>
<Grid Background="Transparent">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Border Grid.Row="0" 
            Grid.Column="0"
            Grid.ColumnSpan="2"
            Background="DarkGray">
        <StackPanel Orientation="Horizontal"
                    HorizontalAlignment="Left">
            <Button x:Name="LoadDataBttn" 
                    Content="Load Data"
                    Width="125"
                    Height="Auto"
                    Margin="1,0"
                    Command="{Binding LoadDataCommand}"/>
            <Button Content="Clear Data"
                    Width="125"
                    Height="Auto"
                    Margin="1,0"/>
            <Button x:Name="ExportToXMLBttn" 
                    Content="Export To XML"
                    Width="125"
                    Height="Auto"
                    Margin="1,0"/>
        </StackPanel>
    </Border>
    <Grid Grid.Row="1"
          Grid.Column="0"
          Grid.ColumnSpan="1">
        <DataGrid x:Name="DataGrid1"
                  ItemsSource="{Binding ICollectionProperty}"
                  SelectedItem="{Binding SelectedItem}"
                  AutoGenerateColumns="True"
                  CanUserAddRows="False"
                  CanUserDeleteRows="False"
                  Background="Transparent">

        </DataGrid>
    </Grid>
    <Grid Grid.Row="1"
          Grid.Column="1">
        <DataGrid ItemsSource="{Binding ICollectionProperty2}}"
                  AutoGenerateColumns="True"
                  CanUserAddRows="False"
                  CanUserDeleteRows="False"
                  Background="Transparent"
                  Style="{StaticResource AzureDataGrid}">
        </DataGrid>
    </Grid>
</Grid>

1 个答案:

答案 0 :(得分:0)

我总是讨厌“列间距”属性,但有时你只需要使用它。 在我看来,你应该将你的内容划分为更多网格,同时明确分离元素。

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

    <Border Grid.Row="1">...</Border>

    <Grid Grid.Row="2">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <DataGrid Grid.Column="0">...
        <DataGrid Grid.Column="1">...
    </Grid>
</Grid>

也许列跨度是问题......我不知道。尝试。