2012-01-01 2 views
0

다양한 속성을 가진 Car 클래스가 있습니다.CollectionViewSource 동적으로 정렬하기

나는 단순함을 위해 객체 데이터 공급자를 통해 XAML에서 사용할 수있는 일련의 자동차 항목을 정의한 정적 Cars 컬렉션 클래스를 사용합니다.

XAML에 컬렉션 뷰 소스가 정의되어있어 ObjectDataProvider에 성공적으로 바인딩됩니다.

나는 컬렉션을 보여주는 목록 상자가 있습니다.

모든 표준 자습서에서 권장하는대로 CVS에 정렬을 추가했으며 모든 것이 잘 작동합니다.

내 질문 : 다른 필드에서 정렬하려고한다고 가정합니다. 분명히 고객에게 코드를 제공하지 않아도이를 변경할 수있는 방법이 있습니다. 그래서 나는 콤보 박스를 구현했다.

다음 코드를 사용하여 Car 클래스의 속성 목록을 콤보 상자에로드하지만 속성 목록 만 가져 오는 것은 아닙니다. 나는 또한 그들의 데이터 유형을 얻는다. 나는 이것을 원하지 않는다. (콤보 상자에 표시되는 것)

Car xyz=new Car(); //Make a temp Car Object so we can get a list of properties. 
//Assign this to the combobox for listing. 
cbxSortPrimary.ItemsSource = xyz.GetType().GetProperties(); 

결과 :

System.String Model 
Double Price 
Int32 NoOfPrevOwners 
DataType PropertyName 
ect... ect... 
ect... ect... 
ect... ect... 

내 목표는 콤보 상자에 속성 이름에로드하는 것입니다. ComboBox.SelectedItem.ToString은() 속성의 이름에 정렬 할 포함 할 경우

myListBox.Items.SortDescriptions.Add(new SortDescription(ComboBox.SelectedItem.ToString(), ListSortDirection.Descending)); 

: 다음과 같은 코드의 라인을 구축하기 위해 선택한 속성 이름을 사용합니다.

그래서 어떻게 데이터 이름을 속성 이름 앞에 없앨 수 있습니까? 나는 모든 종류의 지저분한로드를 다른 목록에 넣을 수 있다는 것을 알고있다. 그리고 나서 오른쪽에서 첫 번째 공백을 찾고 그 전에 모든 것을 다듬는 문자열 핸들링을 다룬다.. 하지만 반드시 쉬운 방법이 있어야합니다.

효과적으로 내가 뭘 하려는지 사용자가 Car 클래스의 다른 속성을 정렬하도록하는 것입니다. (그래서 속성을 어딘가에로드하고 사용자가 선택할 수 있도록합니다 (따라서 콤보 상자). 내가 궁금해하는 점은 모든 문자열 조작 코드없이 속성 목록을 얻는 쉬운 방법이 있어야하며 매우 기본적인 요구 사항처럼 보이므로 많이 반영하지 않아야한다는 것입니다.

미리 도움을 청하십시오!

답변

1

그것은 전혀 지저분한 아니다 :

 var properties = new List<string>(); 

     foreach (var info in typeof(Car).GetProperties()) 
     { 
      properties.Add(info.Name); 
     } 
     cbxSortPrimary.ItemsSource = properties; 
+0

덕분에 매우 솔루션에 대한 많은 및 빠른 응답. 잘 했어. –