0

アイテムをグループ化したいので、LongListSelector を実装します。しかし、この LongListSelector は、実行時にアイテムを表示しません。

これは私の 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>

私のXAMLコード:

<toolkit:LongListSelector Background="Transparent" ItemsSource="{Binding TasksByDueDate}">
    <toolkit:LongListSelector.GroupHeaderTemplate>
        <DataTemplate>
            <Border Background="Transparent">
                <Border Background="{StaticResource PhoneAccentBrush}" Width="475" Height="35" HorizontalAlignment="Left">
                    <TextBlock Text="{Binding Key}" 
                           Foreground="{StaticResource PhoneForegroundBrush}" 
                           Style="{StaticResource PhoneTextGroupHeaderStyle}"
                           VerticalAlignment="Bottom"/>
                </Border>
            </Border>
        </DataTemplate>
    </toolkit:LongListSelector.GroupHeaderTemplate>
    <toolkit:LongListSelector.ItemTemplate>
        <DataTemplate>
            <StackPanel Margin="0,0,0,17" Width="432" Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Width="345"/>
            </StackPanel>
        </DataTemplate>
    </toolkit:LongListSelector.ItemTemplate>
</toolkit:LongListSelector>

MainViewModel.cs:

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

    public IEnumerable<Group<string, Task>> TasksByDueDate { get; private set; }

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

    public bool IsDataLoaded { get; private set; }

    public void LoadPlannedData()
    {
        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")
                        orderby (DateTime)task.Element("Created") descending
                        select task;

            foreach (XElement xElemItem in tasks)
            {
                Tasks.Add(new Task
                {
                    Name = xElemItem.Element("Name").Value.ToString(),
                    DueDate = xElemItem.Element("DueDate").Value.ToString(),
                    Created = xElemItem.Element("Created").Value.ToString()
                });
            }

            TasksByDueDate = from c in Tasks 
                             group c by c.DueDate into n
                             select new Group<string, Task>(n);
        }
        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));
        }
    }
}

Group.cs:

public class Group<TKey, TElement> : IGrouping<TKey, TElement>
{
    private readonly IGrouping<TKey, TElement> grouping;

    public Group(IGrouping<TKey, TElement> unit)
    {
        grouping = unit;
    }

    public TKey Key
    {
        get { return grouping.Key; }
    }

    public IEnumerator<TElement> GetEnumerator()
    {
        return grouping.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return grouping.GetEnumerator();
    }
}

Task の ListBox を表示すると、すべてがうまく表示されます。しかし、グループ化されたアイテムを表示すると、アイテムは表示されません。

アプリケーションは、LongListSelector のアイテムのみが欠落している (クラッシュなし) ウェルを実行します。

私は何を間違っていますか?

4

1 に答える 1