1

내 MainPage의 ListBox를 CameraCaptureTask를 사용하여 가져온 이미지 모음에 바인딩하고 있습니다. 내 SettingsPage의 각 RadioButton이 선택 될 때 오름차순에서 내림차순으로 정렬 순서를 변경할 수 있기를 원하지만 모든 것이 올바르게 작동합니다. 어떤 RadioButton이 선택되었는지를 기억하는 IsolatedStorage에 값을 만들었 기 때문에, 내 응용 프로그램의 MainPage가로드 될 때 ListBox의 바인딩 컬렉션이 정렬되어 그에 따라 표시됩니다. 그러나 내 컬렉션을 실제로 정렬하면 문제가 발생합니다. 컬렉션의 각 이미지에 대해 DateTaken 속성도 저장됩니다.ListBox를 날짜순으로 정렬하는 방법

에서 MainPage.xaml 이제 내 생성자에서 실제로 IsolatedStorage에서 이미지로 채워집니다 PictureRepository.Instance, 내 DataContext 동일하게 설정하고

<ListBox x:Name="Recent" ItemsSource="{Binding Pictures}" Margin="8" 
        SelectionChanged="recent_SelectionChanged" 
</ListBox> 

. 바인딩 전에 컬렉션의 정렬 순서를 변경하는 위치 또는 방법을 잘 모르겠습니다. 실제로 정렬 된 목록의 복사본을 바인드하고 실제로 IsolatedStorage의 정렬 순서를 변경하지 않으려한다고 생각합니다. 틀림없이 내가 전에 목록 상자를 채우기 전에 ObservableCollection에 정렬 해본 적이 있지만 나는 Sorting Listbox Items by DateTime values

MainPage.xaml.cs를

public MainPage() 
    { 
     InitializeComponent(); 

     DataContext = PictureRepository.Instance; 
     //Determine which Sort Radio Button has been Checked and display collection accordingly 
     //Also not sure if this should be performed in the OnNavigatedTo event 
     if (Settings.AscendingSort.Value) 
     { 
      //PictureRepository.Instance.Pictures.OrderBy(p => p.DateTaken).First(); 
      //DataContext = PictureRepository.Instance; 
      var items = Recent.Items.Cast<CapturedPicture>().OrderBy(p => p.DateTaken).ToArray(); 
      if (Recent.Items.Count != 0) 
       Recent.Items.Clear(); 
      Recent.Items.Add(items); 
     } 
     else 
     { 
      //PictureRepository.Instance.Pictures.OrderByDescending(p => p.DateTaken).First(); 
      //DataContext = PictureRepository.Instance; 
      var items = Recent.Items.Cast<CapturedPicture>().OrderByDescending(p => p.DateTaken).ToArray(); 
      Recent.Items.Clear(); 
      Recent.Items.Add(items); 
     } 
    } 

어느 옵션이 근무하고있다에서 참조로 다음의 뭔가를 시도했습니다. 모든 링크, 도움 또는 조언은이 개념을 배우는 데 크게 감사 할 것입니다!

+0

DataContext가 'PictureRepository.Instance'이고 ListBox가 'Pictures'에 바인딩되어 있고 'Recent'라는 속성을 정렬하고 있습니다. 어느 시점에서 ListBox의 ItemsSource를 정렬 된 항목으로 설정하려고합니까? –

+0

SettingsPage에서 어떤 RadioButton이 선택되었는지에 따라 정렬 된 항목을 즉시 설정하려고합니다. 'PictureRepository.Instance'는 모델에서'Pictures' ObservableCollection을 리턴하고,'Recent'는 콜렉션이 바인드 된 ListBox입니다. – Matthew

답변

1

ListBox를 정렬 할 때 CollectionViewSource을 사용하는 것을 선호합니다. 바인딩 할 백엔드 컬렉션을 변경하는 대신 컨트롤에서이를 처리 할 수 ​​있습니다.

당신 페이지의 XAML : 페이지는 ColletionViewSource가 추가 또는 SortDescriptions을 제거하여 분류하는 방법을 수정할 수 있습니다에서

<phone:PhoneApplicationPage.Resources> 
    <CollectionViewSource x:Key="PicturesViewSource" Source="{Binding Pictures}"> 
     <!-- Add for design time help. This object should return a collection of pictures 
     <d:Source> 
      <viewModels:MyFakeObject/> 
     </d:Source> 
     --> 
    </CollectionViewSource> 
</phone:PhoneApplicationPage.Resources> 

<Grid> 
    <ListBox ItemsSource="{Binding Source={StaticResource PicturesViewSource}}"/> 
</Grid> 

. 사용자가 라디오 버튼을 변경할 때마다 이렇게 할 수 있습니다.

PicturesViewSource.SortDescriptions.Clear(); 
PicturesViewSource.SortDescriptions.Add(new SortDescription("DateTaken", ListSortDirection.Descending)); 
관련 문제