Сортировка массива в windows phone 7 - PullRequest
0 голосов
/ 28 июля 2011

Я пытаюсь отсортировать данные, которые я получил. У меня есть два данных времени и прикрепленный заголовок. Я был в состоянии отсортировать время. Но прикрепленное примечание не согласовывалось с отсортированным расположением.

Например, Время -> 10:45 Прикрепленное название -> Домашнее задание 8:45 -> Работа

Сортировка по времени Время 8:45 утра Домашнее задание 10:50 утра Работа

защищенное переопределение void OnNavigatedTo (System.Windows.Navigation.NavigationEventArgs e)

    {
        base.OnNavigatedTo(e);
        selectedFolderName = "";

        if (NavigationContext.QueryString.TryGetValue("selectedFolderName", out selectedFolderName))
            selectedFolderName1 = selectedFolderName;



        IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication();
        //For time
        try
        {
            StreamReader readFileTime = new StreamReader(new IsolatedStorageFileStream(selectedFolderName1 + "\\time.Schedule", FileMode.Open, myStore));
            //For title
            StreamReader readFileTitle = new StreamReader(new IsolatedStorageFileStream(selectedFolderName1 + "\\title.Schedule", FileMode.Open, myStore));
            //For category
            StreamReader readFileCategory = new StreamReader(new IsolatedStorageFileStream(selectedFolderName1 + "\\category.Schedule", FileMode.Open, myStore));


            String timeText = readFileTime.ReadLine();
            timeSplit = timeText.Split(new char[] { '^' });
            Array.Sort(timeSplit);

            String titleText = readFileTitle.ReadLine();
            titleSplit = titleText.Split(new char[] { '^' });


            String categoryText = readFileCategory.ReadLine();
            categorySplit = categoryText.Split(new char[] { '^' });

        }
        catch (Exception)
        {
            // noScheduleTxt.Visibility = Visibility.Visible;
        }



        if (scheduleListBox.Items.Count == 0)
        {

            for (int i = 0; i < timeSplit.Length; i++)
            {
                string timeList = timeSplit[i];
                string titleList = titleSplit[i];
                string categoryList = categorySplit[i];

                //Define grid column, size
                Grid schedule = new Grid();
                //Column to hold the time of the schedule
                ColumnDefinition timeColumn = new ColumnDefinition();
                GridLength timeGrid = new GridLength(110);
                timeColumn.Width = timeGrid;
                schedule.ColumnDefinitions.Add(timeColumn);


                //Text block that show the time of the schedule
                TextBlock timeTxtBlock = new TextBlock();
                timeTxtBlock.Text = timeList;
                //Set the alarm label text block properties - margin, fontsize
                timeTxtBlock.FontSize = 28;
                timeTxtBlock.Margin = new Thickness(0, 20, 0, 0);
                //Set the column that will hold the time of the schedule
                Grid.SetColumn(timeTxtBlock, 0);
                schedule.Children.Add(timeTxtBlock);



                //Column to hold the title of the schedule
                ColumnDefinition titleColumn = new ColumnDefinition();
                GridLength titleGrid = new GridLength(300);
                titleColumn.Width = titleGrid;
                schedule.ColumnDefinitions.Add(titleColumn);

                //Text block that show the title of the schedule
                TextBlock titleTxtBlock = new TextBlock();
                titleTxtBlock.Text = titleSplit[i];

                if (titleSplit[i].Length > 15)
                {
                    string strTitle = titleSplit[i].Substring(0, 15) + "....";
                    titleTxtBlock.Text = strTitle;
                }
                else
                {
                    titleTxtBlock.Text = titleSplit[i];
                }
                //Set the alarm label text block properties - margin, fontsize
                titleTxtBlock.FontSize = 28;
                titleTxtBlock.Margin = new Thickness(20, 20, 0, 0);
                //Set the column that will hold the title of the schedule
                Grid.SetColumn(titleTxtBlock, 1);
                schedule.Children.Add(titleTxtBlock);



                //Column 3 to hold the image category of the schedule
                ColumnDefinition categoryImageColumn = new ColumnDefinition();
                GridLength catImgnGrid = new GridLength(70);
                categoryImageColumn.Width = catImgnGrid;
                schedule.ColumnDefinitions.Add(categoryImageColumn);

                //Text block that show the category of the schedule
                TextBlock categoryTxtBlock = new TextBlock();
                categoryTxtBlock.Text = categorySplit[i];

                //set the category image and its properties - margin, width, height, name, background, font size
                Image categoryImage = new Image();
                categoryImage.Margin = new Thickness(-20, 15, 0, 0);
                categoryImage.Width = 50;
                categoryImage.Height = 50;
                if (categoryTxtBlock.Text == "Priority")
                {
                    categoryImage.Source = new BitmapImage(new Uri("/AlarmClock;component/Images/exclamination_mark.png", UriKind.Relative));
                }
                else
                    if (categoryTxtBlock.Text == "Favourite")
                    {
                        categoryImage.Source = new BitmapImage(new Uri("/AlarmClock;component/Images/star_full.png", UriKind.Relative));
                    }


                Grid.SetColumn(categoryImage, 2);
                schedule.Children.Add(categoryImage);

                scheduleListBox.Items.Add(schedule);
            }


        }
    }

1 Ответ

3 голосов
/ 28 июля 2011

Проблема в том, что вы сортируете свой массив времени, но не свой массив заголовков. Просто создайте новый класс «ScheduleItem» с тремя свойствами: «Время», «Название» и «Категория». Затем создайте строгий тип списка и выполните сортировку списка.

Ваш класс должен выглядеть так

public class ScheduleItem : IComparable<ScheduleItem>
{
    public DateTime Time { get; set; }
    public string Title { get; set; }
    public string Category { get; set; }


    public int CompareTo(ScheduleItem item)
    {
        return Title.CompareTo(item.Title);
    }
}

После этого вы можете прочитать ваши значения из ваших файлов и создать свой список следующим образом.

if (scheduleListBox.Items.Count == 0)
{

    List<ScheduleItem> scheduleItems = new List<ScheduleItem>();
    for (int i = 0; i < timeSplit.Length; i++)
    {
        string timeList = timeSplit[i];
        string titleList = titleSplit[i];
        string categoryList = categorySplit[i];

        ScheduleItem item = new ScheduleItem
                                {
                                    Time = DateTime.Parse(timeList),
                                    Title = titleList,
                                    Category = categoryList
                                };
        scheduleItems.Add(item);

    }

    scheduleItems.Sort();
}

А теперь переберите свой список ScheduleItems и создайте свои элементы управления. Ваш код должен выглядеть примерно так

* * 1010
...