2009-12-01 3 views
0

Silverlight DataGrid를 IList 파생 데이터 원본과 함께 사용하면 CanUserSortColumns/CanUserSort 속성이 false가 아니라고 가정하고 열을 클릭하여 정렬 할 수 있습니다.Datagrid는 일부 필드 (개체, 개체 하위 필드, 기본 형식)를 정렬 할 수 없습니다.

그러나 일부 가장자리는 정렬 할 수 없습니다. 값이 표시되지만 열을 클릭해도 효과가 없습니다.

첫 번째 엣지 경우는 매우 단순한 List<string> 인 것처럼 보이지만 값은 표시되지만 정렬은 허용되지 않습니다. 이것은 문자열이 IComparable을 함축하는 것처럼별로 의미가 없습니다.

두 번째 가장자리의 경우가 훨씬 더 복잡하므로 해결해야 할 수도 있습니다. 두 번째 경우는 객체 유형의 필드와 하위 필드를 포함합니다.

public class ContainerItem 
{  
    public object ChildValue {get; set;} 

    // Other properties 
} 

childValue가의 값은 그리드에 표시 할 수 있으며, childValue가 할당 된 유형 속성이있는 경우 우리는 그들 (childValue가. 재산권)에 결합 할 수 있지만, 우리는 열을 정렬 할 수 없습니다.

정의 된 유형이 없다는 것이 명백한 사실입니다. 객체가 서로 다른 호환되지 않는 유형 인 경우에는 분명히 문제가 될 것입니다. 내 특정 상황에서 ChildValue 같이 열 바인딩 정의를 같이 동적으로 할당 된 함께 붙어 있어요.

난 분명히 할 일이 필요해 - 나는 ContainerItem 클래스 정의를 제어 할 수 있고 ChildValue의 속성에 대한 바인딩은 항상 OneWay (ContainerItem의 고정 속성 만 양방향 바인딩을 사용함)입니다.

아마도 SortMemberPath를 사용하여 ContainerItem의 일부 배열 속성에 바인딩 할 수 있습니다. 배열의 각 요소는 두 개의 ChildValue 속성에서 값을 가져올 수 있도록 열의 바인딩 정보로 채워진 ContainerItemComparer 개체입니다. , 비교하고, 속성이 알몸의 객체임을 DataGrid가 인식하지 않고 결과를 반환합니까?

답변

1

첫 번째 엣지 케이스가 꽤 인공이라고 생각합니다. 왜 문자열 목록을 DataGrid에 바인딩합니까? 정렬 경로로 사용할 속성 이름이 없기 때문에 아마 작동하지 않을 것입니다.

동적으로 정렬하는 문제에 대해서는 컬렉션에 ICollectionView을 구현하는 것이 좋습니다. 그런 다음 정렬 작업을 수동으로 제어 할 수 있지만 내장 정렬 작업을 수행하지 않고 처리해야합니다.

관련 문제