Проникнуться в момент, когда коллекция будет заполнена и удалена, а затем загружается Adorner? - PullRequest
2 голосов
/ 01 октября 2010

Я группирую данные в WPF DataGrid. это занимает очень много времени, поэтому я хочу показать панель загрузки / рекламный блок.

Я использую MVVM. Как бы вы удалили / скрыли полосу загрузки / элемент оформления, когда сетка данных завершила группировку.

Как получить момент, когда Данные сгруппированы на 100%? Можно ли это как-то установить в XAML или получить и т. Д.? 1005 *

Ответы [ 2 ]

0 голосов
/ 01 октября 2010

Одним из решений может быть привязка к Visibilty Expander.Потому что только когда все данные сгруппированы, расширитель виден.Но это работает только в том случае, если для IsExpanded установлено значение TRUE, в противном случае расширитель отображается сразу, а группировка происходит при нажатии на стрелку расширителя.

Мой расширитель не раскрывается в настройках по умолчанию.Поэтому я попытался ускорить расширение экспандера, разорвав RowStyle и CellStyle.Это минимум xaml, который я мог бы достичь, не нарушая моей функциональности нередактируемой сетки, показывающей чередующийся BackGround

 <Style x:Key="DataGridRowStyle" TargetType="{x:Type DataGridRow}">               
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridRow}">
                            <Border Background="{TemplateBinding Background}" SnapsToDevicePixels="True">                                                            
                               <DataGridCellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>   
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

            <Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
                <Setter Property="Background" Value="Transparent" />
                <Setter Property="BorderBrush" Value="Transparent" />             
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridCell}">                          
                                <ContentPresenter />                
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">                     
                        <Setter Property="Foreground" Value="Red"/>                    
                    </Trigger>
                </Style.Triggers>
            </Style>

Расширение идет быстрее, я предполагаю, что это примерно на 30-40%.По крайней мере, я узнаю это визуально.:)

0 голосов
/ 01 октября 2010

Я думаю, вы могли бы использовать событие ItemContainerGenerator.StatusChanged.Когда статус изменится на ContainersGenerated, группировка будет завершена.

Обратите внимание, что это всего лишь предположение, но я подозреваю, что контейнеры регенерируются при изменении GroupDescriptions ...

...