1

MainPage の ListBox を、CameraCaptureTask を使用して撮影した画像のコレクションにバインドしています。すべてが正しく機能していますが、SettingsPage のそれぞれの RadioButtons がチェックされているときに、並べ替え順序を昇順から降順に変更できるようにしたいと考えています。どの RadioButton がチェックされているかを記憶する IsolatedStorage の値を作成したので、アプリケーションの MainPage が読み込まれると、それに応じて ListBox のバインディング コレクションが並べ替えられて表示されます。ただし、コレクションの実際の並べ替えには、問題があります。コレクション内の各画像、DateTakenプロパティも保存されることに注意してください。

MainPage.xaml

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

ここで、コンストラクターでDataContextequal を設定してPictureRepository.Instanceいます。これには、IsolatedStorage からの画像が実際に取り込まれます。バインドする前にコレクションの並べ替え順序を変更する場所や方法がわかりません。実際には、ソートされたリストのコピーをバインドしたいと考えており、実際には、IsolatedStorage のソート順を変更したくありません。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);
        }
    }

どちらのオプションも機能しませんでしたが、ListBox にデータを入力する前に ObservableCollection を並べ替えようとしたことはありません。この概念を学ぶ上で、リンク、支援、またはアドバイスをいただければ幸いです。

4

1 に答える 1