問題はDataGridColumnHeader
がローカル計算プロパティとしてCanUserSort
性質を有していること、です。手動で列を生成することで設定できます(不必要なもの)。
セッターを持つプロパティの場合は、TabIndex
== 0のDataTrigger
を作成し、xamlスタイルのSetter
に設定できます。
<DataGrid AutoGenerateColumns="True"
ItemsSource="{Binding MyDataTable}"
CanUserSortColumns="True"
AutoGeneratedColumns="DataGrid_OnAutoGeneratedColumns">
</DataGrid>
あなたの分離コード:
は
private void DataGrid_OnAutoGeneratedColumns(object sender, EventArgs e)
{
DataGrid dg = sender as DataGrid;
if (dg == null) return;
dg.Columns.ToList().Select((col, indx) => new {Col = col, Indx = indx}).ToList().ForEach(obj => obj.Col.CanUserSort = obj.Indx == 0);
}
これは、最初の列UserCanSort
プロパティを有効にし、他人を無効
AutoGeneratedColumns
を使用して、あなたの唯一のチャンスは次のとおりです。この機能はviewmodelから独立しており、view.xaml.cs
コードビハインドファイルに置くことができます。
EDIT:
あなたがちょうどあなた自身のDataGridControl
を使用することによってそれを行うことができます任意の分離コードを持っていない場合。
MyDataGrid。CS
namespace YourNamespace {
public class MyDataGrid : DataGrid
{
protected override void OnAutoGeneratedColumns(EventArgs e)
{
DataGrid dg = sender as DataGrid;
if (dg == null) return;
dg.Columns.ToList().Select((col, indx) => new {Col = col, Indx = indx}).ToList().ForEach(obj => obj.Col.CanUserSort = obj.Indx == 0);
base.OnAutoGeneratedColumns(e);
}
}
}
ビュー:
<YourNamespace:MyDataGrid AutoGenerateColumns="True"
ItemsSource="{Binding MyDataTable}"
CanUserSortColumns="True">
</YourNamespace:MyDataGrid>
、あなたは、単一の行の分離コードなしで行われます。
私は列を自動生成しているため、「ItemsSourceを使用する前にアイテムコレクションが空でなければなりません。」というような例外が発生しますので、私にとってはうまくいきません。 –
@stackerflow xaml経由では不可能です。しかし、xamlはPropertiesを使用するときに何もしていません。したがって、列を自動生成する場合は、コードファイルのこの列にアクセスできる必要があります。 Iamはxamlグリッドに慣れていませんが、myGrid.ColumnCollection [0] .CanUserSort =値をfalseに設定した他のすべての列に対してtrueを試してみてください。この方法を使用する前に必ず列を生成する必要があります。 – Sebi
はい、コードで扱うことができますが、私はMVVMパターンを使用していますが、実際にはviewModelとビューを結合したくありません。可能な回避策があれば、本当に便利です。 –