У меня есть сетка данных с некоторыми столбцами. Я хочу изменить порядок столбцов динамически. Я пытаюсь установить 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 и свойству. Но не в состоянии переставить колонки.