绑定字典<string,ienumerable =“”>到数据透视控件</string,>

时间:2014-05-12 12:02:36

标签: c# wpf windows-phone-8 dictionary binding

我尝试将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;
}

调试时看起来像这样:

Dictionary result

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:1)

ItemSource属性需要IEnumerable,因此您需要将数据转换为集合。

最简单但非常混乱的方法是将字典转换为IEnumerable<Tuple<string,IEnumerable>>,其中第一项是键,第二项是值,或者只创建一个包含键和值并使用它的类。