WPF - 如何在布局期间停止ItemsControl伪网格的列跳舞/跳跃

Dre*_*kes 5 wpf layout itemscontrol

关于SO的其他 几个问题 得出了我的相同结论 - 使用a 来构造每个项目以定位项目,使得它们类似于网格比使用a更简单(特别是格式化). ItemsControlDataTemplateListView

代码类似于:

<StackPanel Grid.IsSharedSizeScope="True">
  <!-- Header -->
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto" SharedSizeGroup="Column1" />
      <ColumnDefinition Width="Auto" SharedSizeGroup="Column2" />
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Column="0" Text="Column Header 1" />
    <TextBlock Grid.Column="1" Text="Column Header 2" />
  </Grid>
  <!-- Items -->
  <ItemsControl ItemsSource="{Binding Path=Values, Mode=OneWay}">
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <Grid>
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="Column1" />
            <ColumnDefinition Width="Auto" SharedSizeGroup="Column2" />
          </Grid.ColumnDefinitions>
          <TextBlock Grid.Column="0" Text="{Binding ColumnProperty1}" />
          <TextBlock Grid.Column="1" Text="{Binding ColumnProperty2}" />
        </Grid>
      </DataTemplate>
    </ItemsControl.ItemTemplate>
  </ItemsControl>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

我看到的问题是,无论何时我交换ItemsSource绑定的对象(这ObservableCollection是我替换引用,而不是清除和重新添加),整个"网格"会跳动几秒钟.

据推测,它正在进行一些布局传递以使所有Auto-width列匹配.

这对我的用户来说非常分散注意力,我想整理一下.有没有人见过这个?

arc*_*592 0

不幸的是,我无法使用提供的代码重现该问题。我尝试过交换 20 到 1000 个项目的样本,并且集合内有 100 种不同的宽度。没有东西在跳舞。在大型集合(200 及以上)中,UI 过去会挂起一段时间,然后释放,显示包含所提供项目的新网格。