2017-07-09 1 views
0

私は、2つの列にまたがる境界線のためにデータバインドが遅いという問題がありました。最初の列にのみ境界線が存在するように境界線を変更すると、データグリッドデータバインディングはほぼ即時に実行されます。以下の私のコードを見てください。WPFグリッド内の枠線のスパンが原因でUIフリーズが発生するのはなぜですか?

グリッドの2番目の列の幅は*に設定されているため、Autoに変更すると正しく動作しますが、2番目のデータグリッドで残りの空き領域を埋める必要があります「)別のビューのタブコントロールの内部でこのユーザーコントロールを使用して、mは

<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> 

答えて

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> 

多分、列幅が問題です...私は分かりません。お試しください。

+1

コメントありがとうございます。これは私がやったことですが、columnspanとグリッド列の定義*がデータのやりとりを遅くするということは奇妙です。これは、境界線/データグリッドが視覚的要素の外側で永遠に続くようなものでした – ExcelNoobie25

関連する問題