По умолчанию, когда мой DataGrid загружен, мои данные будут отсортированы по ProductName asc. Однако в заголовке ProductName gridview не будет отображаться значок стрелки вверх. Это все равно для меня, чтобы программно запускать значок?
XAML:
<DataGrid x:Name = "GridProduct"
ItemsSource = "{Binding Path=ProductResult}"
Style = "{StaticResource defaultDataGridStyle}"
CellStyle = "{StaticResource defaultCellStyle}"
ColumnHeaderStyle = "{StaticResource defaultCellHeaderStyle}">
<DataGrid.Columns>
<DataGridTextColumn Header = "Product Name" Binding = "{Binding ProductName}" />
<DataGridTextColumn Header = "Product Price" Binding = "{Binding ProducPrice}"/>
</DataGrid.Columns>
</DataGrid>
Стиль:
<Style x:Key = "defaultCellHeaderStyle" TargetType = "DataGridColumnHeader" BasedOn = "{StaticResource MetroDataGridColumnHeader}">
<Setter Property = "FontSize" Value = "16"></Setter>
<Setter Property = "Command" Value = "{Binding Path=DataContext.SortCommand, RelativeSource = {RelativeSource AncestorType=DataGrid}}" />
<Setter Property = "CommandParameter" Value = "{Binding Path=Content, RelativeSource = {RelativeSource Self}}"></Setter>
</Style>
<Style x:Key = "defaultCellStyle" TargetType = "DataGridCell" BasedOn = "{StaticResource MetroDataGridCell}">
<Setter Property = "FontSize" Value = "16"></Setter>
<Setter Property = "HorizontalContentAlignment" Value = "Center"></Setter>
<Setter Property = "HorizontalAlignment" Value = "Stretch"></Setter>
</Style>
MVVM:
public List<Product> ProductResult
{
get
{
_productResult = _productResult.OrderBy(x => x.Name).ToList();
return _productResult;
}
}





Добавьте в DataGridTextColumn следующее:
SortDirection = "Ascending"
Если вы хотите синхронизировать эффективную сортировку с визуальным стилем в столбце, это должно помочь:
( (INotifyCollectionChanged)Items.SortDescriptions ).CollectionChanged += new NotifyCollectionChangedEventHandler( OnItemsSortDescriptionsChanged );
private void OnItemsSortDescriptionsChanged( object sender, NotifyCollectionChangedEventArgs e )
{
//Synchronize effective sorting in the grid and Visual style on columns
if ( Items != null )
{
foreach ( DataGridColumn column in Columns )
{
column.SortDirection = null;
foreach ( SortDescription sd in Items.SortDescriptions )
{
if ( column.SortMemberPath == sd.PropertyName )
{
column.SortDirection = sd.Direction;
break;
}
}
}
}
}
Сортировка, отслеживание выбора и фильтрация (если вы выполняете какие-либо действия на стороне графического интерфейса пользователя) в MVVM обычно выполняются через CollectionView. Если вы не передадите один элемент управления, они создадут его автоматически. Вероятно, вам нужно взять это под контроль. docs.microsoft.com/en-us/dotnet/framework/wpf/controls/…