Commandデータを並べ替えるには、を使用する必要がありDataGridColumnHeaderます。DataGridに表示されるすべてのデータがないため、標準の並べ替え機能では不十分ですDataGrid。VMにすべてのデータが存在するわけではありません。(不可能です...多すぎます)サーバーにデータの具体的なページを要求するだけです。そして今、私はまた、ソートされたデータから具体的なページを取得したいと思います。
だから私はこれをしました:
 <DataGrid ItemsSource="{Binding Path=Entities, Mode=OneWay}" CanUserSortColumns="False" SelectionMode="Single" SelectedItem="{Binding Path=SelectedEntity}">
      <DataGrid.ColumnHeaderStyle>
           <Style TargetType="{x:Type DataGridColumnHeader}">
               <Setter Property="Command" Value="{Binding Path=MyCommand}"/>
               <Setter Property="CommandParameter" Value="{Binding Path=Content, RelativeSource={RelativeSource Self}}"/>
           </Style>
      </DataGrid.ColumnHeaderStyle>
      <DataGrid.Columns>
           <DataGridTemplateColumn >
                <DataGridTemplateColumn.Header>
                     <DataGridColumnHeader Content="Column1" />
                 </DataGridTemplateColumn.Header>
                 <DataGridTemplateColumn.CellTemplate>
                      <DataTemplate>
                          <TextBox Text="{Binding Path=Property1}"/>
                      </DataTemplate>
                 </DataGridTemplateColumn.CellTemplate>
           </DataGridTemplateColumn>
      </DataGrid.Columns>
 </DataGrid>
それは素晴らしい働きをします。AutoGenerateColumns="True"そして今、私は残念ながらそれがもう機能しないようにしたいだけです。自動生成された列で機能しない理由を説明し、解決策を提供してくれる人はいますか?前もって感謝します!
編集
それはおそらく、フォローも機能しないという事実と関係があります。
<DataGrid ItemsSource="{Binding Path=Entities, Mode=OneWay}" CanUserSortColumns="False" SelectionMode="Single" SelectedItem="{Binding Path=SelectedEntity}">
  <DataGrid.ColumnHeaderStyle>
       <Style TargetType="{x:Type DataGridColumnHeader}">
           <Setter Property="Command" Value="{Binding Path=MyCommand}"/>
           <Setter Property="CommandParameter" Value="{Binding Path=Content, RelativeSource={RelativeSource Self}}"/>
       </Style>
  </DataGrid.ColumnHeaderStyle>
  <DataGrid.Columns>
       <DataGridTemplateColumn>
            <!-- HERE IS THE CHANGE -->
            <DataGridTemplateColumn.Header>Column1</DataGridTemplateColumn.Header>
             <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate>
                      <TextBox Text="{Binding Path=Property1}"/>
                  </DataTemplate>
             </DataGridTemplateColumn.CellTemplate>
       </DataGridTemplateColumn>
  </DataGrid.Columns>
しかし、スタイルが適用されます。私が試したので、私はこれを知っています:
<Style TargetType="{x:Type DataGridColumnHeader}">
   <Setter Property="Background" Value="Tomato"/> <!-- beautiful tomato background -->
   <Setter Property="Command" Value="{Binding Path=MyCommand}"/>
   <Setter Property="CommandParameter" Value="{Binding Path=Content, RelativeSource={RelativeSource Self}}"/>
</Style>
列ヘッダーにはTomatoの背景がありますが、コマンドが機能しません。
EDIT2
以下が解決策です。コマンドバインディングを変更するとすべてが再び機能するため、どうやらDataGridColumnHeadersDataContextを継承していません。
<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}},
                                Path=DataContext.MyCommand}"/>
しかし、それでも私はその理由をよく理解していません。したがって、詳細な説明で答えると、賞金が得られます。


