アイテムをグループ化したいので、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 のアイテムのみが欠落している (クラッシュなし) ウェルを実行します。
私は何を間違っていますか?