首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF MVVM -以编程方式触发数据标记排序方向的箭头

WPF MVVM -以编程方式触发数据标记排序方向的箭头
EN

Stack Overflow用户
提问于 2018-05-14 13:15:29
回答 2查看 1.7K关注 0票数 0

默认情况下,当加载DataGrid时,ProductName将对数据进行排序。但是,网格视图的ProductName头将不会显示向上箭头图标。这对我来说是以编程方式触发图标吗?

XAML:

代码语言:javascript
复制
<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>

风格:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
public List<Product> ProductResult
{
    get
    {
        _productResult = _productResult.OrderBy(x => x.Name).ToList();
        return _productResult;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-14 13:34:31

将以下内容添加到DataGridTextColumn

代码语言:javascript
复制
SortDirection="Ascending" 
票数 1
EN

Stack Overflow用户

发布于 2019-02-01 10:49:27

如果要将有效排序与列上的视觉样式同步,这将有助于:

代码语言:javascript
复制
( (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;
                }
            }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50331237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档