Динамически меняйте порядок столбцов сетки данных - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть сетка данных с некоторыми столбцами. Я хочу изменить порядок столбцов динамически. Я пытаюсь установить displayindex, но он не отражает. Он принимает само значение отката.

Код XAML:

     <Style x:Key="ColumnHeaderGripperStyle" TargetType="{x:Type Thumb}">
            <Setter Property="Width" Value="8"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="Cursor" Value="SizeWE"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Thumb}">
                        <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <Style x:Key="DataGridImageColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
            <Setter Property="Foreground" Value="Transparent"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                        <Grid>
                            <themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}"
                                             BorderThickness="{TemplateBinding BorderThickness}"
                                             Background="{TemplateBinding Background}"
                                             IsClickable="True"
                                             IsPressed="{TemplateBinding IsPressed}"
                                             IsHovered="{TemplateBinding IsMouseOver}"
                                             Padding="{TemplateBinding Padding}"
                                             SortDirection="{TemplateBinding SortDirection}"
                                             SeparatorBrush="{TemplateBinding SeparatorBrush}"
                                             SeparatorVisibility="{TemplateBinding SeparatorVisibility}">
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                      RecognizesAccessKey="True"
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </themes:DataGridHeaderBorder>
                            <Thumb x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left" Style="{StaticResource ColumnHeaderGripperStyle}"/>
                            <Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right" Style="{StaticResource ColumnHeaderGripperStyle}"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <Style x:Key="DataGridImageCellStyle" TargetType="{x:Type DataGridCell}">
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="BorderBrush" Value="Transparent"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="IsTabStop" Value="False"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" SnapsToDevicePixels="True">
                            <Image Source="{Binding ImageSourceFilePath}" />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">

                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                </Trigger>
                <Trigger Property="IsKeyboardFocusWithin" Value="True">
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/>
                </Trigger>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="IsSelected" Value="true"/>
                        <Condition Property="Selector.IsSelectionActive" Value="false"/>
                    </MultiTrigger.Conditions>
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    <!--<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>-->
                    <!--<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}}"/>-->
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                </MultiTrigger>
                <Trigger Property="IsEnabled" Value="false">
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                </Trigger>
            </Style.Triggers>
        </Style>

        <Style x:Key="DataGridRowStyle" TargetType="{x:Type DataGridRow}">
            <Setter Property="Focusable" Value="True"/>
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="True">
                    <Setter Property="IsSelected" Value="True"/>
                </Trigger>
            </Style.Triggers>
        </Style>

        <Style x:Key="DataGridTextCellStyle" TargetType="{x:Type DataGridCell}">
            <Setter Property="FocusVisualStyle" Value="{x:Null}" />
            <!--Optical-939-->
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="BorderBrush" Value="Transparent"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="IsTabStop" Value="False"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                            <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="5"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}" />
                    <!--Optical-939-->
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                </Trigger>
                <Trigger Property="IsKeyboardFocusWithin" Value="True">
                    <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}" />
                    <!--Optical-939-->
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/>
                </Trigger>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="IsSelected" Value="true"/>
                        <Condition Property="Selector.IsSelectionActive" Value="false"/>
                    </MultiTrigger.Conditions>
                    <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}" />
                    <!--Optical-939-->

                    <!--<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>-->
                    <!--<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}}"/>-->
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                </MultiTrigger>
                <Trigger Property="IsEnabled" Value="false">
                    <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}" />
                    <!--Optical-939-->
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ResourceDictionary>
</UserControl.Resources>

<Grid>
    <DataGrid ItemsSource="{Binding ListItems}" RowStyle="{StaticResource DataGridRowStyle}"
              AutoGenerateColumns="False" RowHeight="60" CanUserAddRows="False" 
              CanUserDeleteRows="False" CanUserResizeRows="False" AlternationCount="2"
              HorizontalGridLinesBrush="LightSteelBlue" VerticalGridLinesBrush="LightSteelBlue"
              SelectionMode="Single" SelectedItem="{Binding SelectedSearchItem}" 
              IsReadOnly="True" KeyboardNavigation.TabNavigation="Once">
        <DataGrid.Background>
            <StaticResource ResourceKey="{x:Static SystemColors.WindowBrushKey}"/>
        </DataGrid.Background>
        <DataGrid.AlternatingRowBackground>
            <StaticResource ResourceKey="InventoryManagementAlternatingRowBackground"/>
        </DataGrid.AlternatingRowBackground>
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Image" CellStyle="{StaticResource DataGridImageCellStyle}" HeaderStyle="{StaticResource DataGridImageColumnHeaderStyle}" DisplayIndex="{Binding SetDisplayIndexImage,FallbackValue=0}"/>
            <DataGridTextColumn Header="InventoryMstrId" Visibility="Hidden" Binding="{Binding InventoryMasterId}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="Manufacturer" Binding="{Binding Manufacturer}" CellStyle="{StaticResource DataGridTextCellStyle}"  />
            <DataGridTextColumn Header="BrandId" Visibility="Hidden" Binding="{Binding BrandId}" CellStyle="{StaticResource DataGridTextCellStyle}"   />
            <DataGridTextColumn Header="Brand" Binding="{Binding Brand}" CellStyle="{StaticResource DataGridTextCellStyle}"  />
            <DataGridTextColumn Header="SeriesId" Visibility="Hidden" Binding="{Binding SeriesId}" CellStyle="{StaticResource DataGridTextCellStyle}"  />
            <DataGridTextColumn Header="Collection" Binding="{Binding Collection}" CellStyle="{StaticResource DataGridTextCellStyle}"  />
            <DataGridTextColumn Header="Description" Binding="{Binding Description}" CellStyle="{StaticResource DataGridTextCellStyle}"  />
            <DataGridTextColumn Header="MaterialId" Visibility="Hidden" Binding="{Binding MaterialId}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="Material" Binding="{Binding Material}" CellStyle="{StaticResource DataGridTextCellStyle}"  />
            <DataGridTextColumn Header="Color" Binding="{Binding Color}" CellStyle="{StaticResource DataGridTextCellStyle}"  />
            <DataGridTextColumn Header="Eye" Binding="{Binding Eye}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="BridgeId" Visibility="Hidden" Binding="{Binding BridgeId}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="Bridge" Binding="{Binding BridgeDescription}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="DBL" Binding="{Binding Dbl}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="Temple" Binding="{Binding Temple}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="Retail Price" Binding="{Binding RetailPrice}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="A" Binding="{Binding A}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="B" Binding="{Binding B}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="Catalog Price" Binding="{Binding CatalogPrice}" CellStyle="{StaticResource DataGridTextCellStyle}"/>
            <DataGridTextColumn Header="CategoryTypeId" Visibility="Hidden" Binding="{Binding CategoryTypeId}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="Category Type" Binding="{Binding CategoryType}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="ED" Binding="{Binding ED}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="GenderTypeId" Visibility="Hidden" Binding="{Binding GenderTypeId}" CellStyle="{StaticResource DataGridTextCellStyle}"/>
            <DataGridTextColumn Header="Gender" Binding="{Binding Gender}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="TempleId" Visibility="Hidden" Binding="{Binding TempleId}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="Temple Description" Binding="{Binding TempleDescription}" CellStyle="{StaticResource DataGridTextCellStyle}" />
            <DataGridTextColumn Header="UPC" Binding="{Binding UPC}" CellStyle="{StaticResource DataGridTextCellStyle}" />
        </DataGrid.Columns>
        <i:Interaction.Behaviors>
            <behaviors:DataGridColumnVisibilityToggleBehavior DisplayColumns="{Binding DisplayColumns}" />
            <behaviors:DataGridSetInitialColumnWidthBehavior MinimumStartingColumnWidth="100" FillAvailableDataGridWidth="True" />
        </i:Interaction.Behaviors>
    </DataGrid>
</Grid>

ViewModel:

       private int _setDisplayIndexImage = 0;

    public int SetDisplayIndexImage
    {
        get => _setDisplayIndexImage;
        set
        {
            if (_setDisplayIndexImage != value)
            {
                _setDisplayIndexImage = value;
                RaisePropertyChangedEvent("SetDisplayIndexImage");

            }
        }
    }

    foreach (var selColumn in GridSelectedColumns)
            {

                ListSearchResults.DisplayColumns.Add(selColumn.FieldName);
                if (selColumn.FieldName == "Image")
                {
                    c1 = c1+1;
                    ListSearchResults.SetDisplayIndexImage = c1;
                }

Значение отката отражается. Управление переходит к блоку if и свойству. Но не в состоянии переставить колонки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...