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
以下が解決策です。コマンドバインディングを変更するとすべてが再び機能するため、どうやらDataGridColumnHeaders
DataContextを継承していません。
<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}},
Path=DataContext.MyCommand}"/>
しかし、それでも私はその理由をよく理解していません。したがって、詳細な説明で答えると、賞金が得られます。