我尝试将dictonary绑定到包含带有itemscontrol的datatemplate的pivot控件。但只显示一个没有内容的枢轴项。 我不知道我在这里做错了什么,所以如果有人可以帮助我找到错误或替代方案,那就太棒了:)
这是XAML标记:
<phone:Pivot Name="visitingHoursPivot" ItemsSource="{Binding}" Height="324">
<phone:Pivot.ItemTemplate>
<DataTemplate>
<phone:PivotItem Header="{Binding Key}">
<ItemsControl Name="rfbItems" ItemsSource="{Binding Value}"
Style="{StaticResource contentItemsControl}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" Width="Auto" HorizontalAlignment="Left" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="125" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding DayName}" Style="{StaticResource App_Content_Grid}" TextAlignment="Left" />
<TextBlock Grid.Column="1" Text="{Binding Description}" Style="{StaticResource App_Content_Grid_Subtle}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</phone:PivotItem>
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
在代码背后我只是这样做:
public Openingstijden()
{
InitializeComponent();
visitingHoursPivot.ItemsSource = HourDataSource.GetAllHours();
}
ItemsSource是一个像这样创建的字典:
public static IDictionary<String, IEnumerable<HourItem>> GetAllHours()
{
IDictionary<String, IEnumerable<HourItem>> result = new Dictionary<string, IEnumerable<HourItem>>();
foreach (ProfileItem profile in _hourDataSource.Profiles)
{
var hoursLinq = _hourDataSource.Hours
.Where(hour => hour.Id == profile.Id)
.Select(hour => hour);
result.Add(profile.Title, hoursLinq.AsEnumerable<HourItem>());
}
return result;
}
调试时看起来像这样:
关于如何解决这个问题的任何想法?
答案 0 :(得分:1)
ItemSource
属性需要IEnumerable
,因此您需要将数据转换为集合。
最简单但非常混乱的方法是将字典转换为IEnumerable<Tuple<string,IEnumerable>>
,其中第一项是键,第二项是值,或者只创建一个包含键和值并使用它的类。