DataGrid で複数の列の並べ替えを無効にする必要があります。これは可能ですか?
質問する
1415 次
2 に答える
2
DataGrid_Sorting イベントをサブスクライブし、args の Handled プロパティを true に設定することで成功しました。
private void ResultsDataGrid_Sorting(object sender, DataGridSortingEventArgs e)
{
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{
e.Handled = true;
}
}
于 2014-03-13T17:44:54.617 に答える
0
ビヘイビアーを作成し、その種類を自分で処理できます。以下はテストされていません:)
public class DataGridICollectionViewSortMerkerBehavior : Behavior<DataGrid>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.Sorting += AssociatedObjectSorting;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.Sorting -= AssociatedObjectSorting;
}
void AssociatedObjectSorting(object sender, DataGridSortingEventArgs e)
{
var view = AssociatedObject.ItemsSource as ICollectionView;
var propertyname = e.Column.SortMemberPath;
e.Column.SortDirection = this.GetSortArrowForColumn(e.Column);
if (view == null)
return;
view.SortDescriptions.Clear();
var sort = new SortDescription(propertyname, (ListSortDirection)e.Column.SortDirection);
view.SortDescriptions.Add(sort);
e.Handled = true;
}
private ListSortDirection GetSortArrowForColumn(DataGridColumn col)
{
if (col.SortDirection == null)
{
return ListSortDirection.Ascending;
}
else
{
return col.SortDirection == ListSortDirection.Ascending ? ListSortDirection.Descending : ListSortDirection.Ascending;
}
}
}
xaml
<DataGrid ...>
<i:Interaction.Behaviors>
<Kadia:DataGridICollectionViewSortMerkerBehavior />
</i:Interaction.Behaviors>
于 2013-07-19T13:22:24.283 に答える