문제

처음으로 Silverlight DataGrid 컨트롤에 데이터를로드하면 사용자가 첫 번째 열의 헤더를 클릭 한 것처럼 화면을 어떻게 보이게 할 수 있습니까? 다시 말해, 데이터는 해당 열의 값에 따라 오름차순으로 정렬해야하며, 작은 정렬 화살표는 첫 번째 열 헤더에 표시되어야합니다.

가능하다고 가정하면 사용자가 첫 번째 열을 클릭 한 다음 두 번째 열을 클릭 한 것처럼 보이게 할 수 있습니까? 다시 말해, 프로그래밍 방식으로 두 부분으로 정렬을 적용하고 사용자가 마치 한 것처럼 화면을 보이게 할 수 있습니까?

도움이 되었습니까?

해결책

나는 이것도해야했고, 데이터 그라이드가 이것을 할 수 있는지를 단단하고 깊게 보았다.

실제로 DataGridColumnHeader 클래스, 즉 InvokeProcessSort에는 적절한 방법이 있지만 내부이며 Datagrid 클래스의 다른 곳에서는 표면되지 않습니다.

내가 할 수 있었던 것은 데이터를 바인딩하기 직전에 데이터를 미리 분기하는 것입니다. 나는 icollectionView와 ObservAbleCollection <>를 구현하는 사용자 정의 데이터 수집을 사용하고 있으며, 이것이 정상적으로 작동하지만 최적의 것은 아니며 반드시 필요하지 않은 많은 작업이 아닙니다.

또한 사전 분류 된 컬렉션을 제공하면 그리드가 정렬 마커를 표시하지 않습니다.

DataGrid Bug -Tracker의 문제로 이것을 제기하겠습니다. 이는 수정하기가 매우 쉬운 상당히 큰 누락입니다. MS는 DataGridColumn 및 DataGrid 클래스에 적절한 메소드를 노출해야합니다.

다른 팁

이것은 내 해결책이었습니다.

if (pcv.CanSort == true)
{
      pcv.SortDescriptions.Add(new SortDescription("ProductionStatus", ListSortDirection.Ascending));
      pcv.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending));
}

, 여기서 PCV는 PageCollectionView입니다. 이는 먼저 ProductionStatus 속성과 날짜 속성에 의해 분류됩니다. 두 번째 열에 대해서만 작은 정렬 화살표 만 표시됩니다.

Paul Sherrif가 우리를 위해 이것을 해결 한 좋은 작은 기사를 찾았습니다 ...

http://weblogs.asp.net/psheriff/archive/2010/07/14/use-collectionviewsource-in-silverlight.aspx

기본적으로 우리는 Datagrid를 CollectionViewSource에 바인딩했습니다. 이에는 CollectionViewSource.sortDescriptions 구성 세트가있어 기본 정렬 순서를 지정할 수 있습니다.

고마워 폴!

DomainDatasource에 SortDescriptor를 추가하기 만하면됩니다.

<riaControls:DomainDataSource.SortDescriptors>
    <riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" />
</riaControls:DomainDataSource.SortDescriptors>

Silverlight 3+에는 CollectionViewSource가 있습니다

http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(v=vs.95).aspx

Microsoft가 제안한대로 XAML에서 기본 정렬 순서를 정의하는 쉬운 방법이 있습니다.

CollectionViewSource를 사용하여 마크 업에서 정렬을 선언합니다

 <Window.Resources>
   <app:MyData x:Key="MyData"/>
   <CollectionViewSource x:Key="cvs" Source={StaticResource MyData}>
     <CollectionViewSource.SortDescriptions>
        <SortDescription Property="Name"/>
     </CollectionViewSource.SortDescriptions>
   </CollectionViewSource>
 </Window.Resources>

 <DataGrid ItemsSource="{Binding Source={StaticResource cvs}}"/> 

댓글에서 발견되었습니다 https://connect.microsoft.com/visualstudio/feedback/details/678782/set-default-sort-order-of-datagrid

Microsoft 샘플에 대한 내 수정 :

 <sort:SortDescription 
   PropertyName="Name"
   Direction="Ascending"
   xmlns:sort="clr-namespace:System.ComponentModel;assembly=System.Windows"
   /> 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top