0

シンプルなタスクアプリをやろうとしています。期限付きのタスクがあり、次のように表示したい:

これは私が欲しいものです

リストボックスにデータを表示する方法は知っていますが、DueDate でグループ化し、その DueDates をヘッダーのように表示する方法がわかりません (下の画像のように)。

これは、タスクを含む私の XML ファイル (tasks.xml) です。

<?xml version="1.0" encoding="utf-8"?>
<Tasks>
  <Task>
    <Name>first task</Name>
    <DueDate>05/03/2013 00:00:00</DueDate>
    <Created>03/27/2013 01:24:08</Created>
  </Task>
  <Task>
    <Name>second task</Name>
    <DueDate>05/17/2013 00:00:00</DueDate>
    <Created>03/27/2013 01:24:19</Created>
  </Task>
  <Task>
    <Name>third task</Name>
    <DueDate>05/17/2013 00:00:00</DueDate>
    <Created>03/27/2013 01:24:38</Created>
  </Task>
</Tasks>

これが私のデータ モデル (MainViewModel.cs) です。

public class MainViewModel : INotifyPropertyChanged
{
    public ObservableCollection<Task> Tasks { get; private set; }

    public MainViewModel()
    {
        this.Tasks = new ObservableCollection<Task>();
    }

    public bool IsDataLoaded
    {
        get;
        private set;
    }

    public void LoadData()
    {
        try
        {
            Tasks.Clear();

            var file = IsolatedStorageFile.GetUserStoreForApplication();
            XElement xElem;

            using (IsolatedStorageFileStream read = file.OpenFile("tasks.xml", FileMode.Open))
            {
                xElem = XElement.Load(read);
            }

            var tasks = from task in xElem.Elements("Task")
                        select task;

            foreach (XElement xElemItem in tasks)
            {
                string dueDate = "";
                DateTime convertedDate;

                if (DateTime.TryParse(xElemItem.Element("DueDate").Value.ToString(), out convertedDate))
                {
                    dueDate = convertedDate.ToShortDateString();
                }

                Tasks.Add(new Task
                {
                    Name = xElemItem.Element("Name").Value.ToString(),
                    DueDate = dueDate,
                    Created = xElemItem.Element("Created").Value.ToString()
                });
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        this.IsDataLoaded = true;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

どうすればいいですか?

4

2 に答える 2

0

個人的には、 Silverlight Toolkit for Windows Phoneの LongListSelector コントロールを使用します。

これは、あなたが探しているデータバインディングとグループ化に関する優れた紹介ガイドです。

于 2013-04-01T11:35:49.847 に答える