【问题标题】:Binding Dictionary<string, IEnumerable> to Pivot control将 Dictionary<string, IEnumerable> 绑定到 Pivot 控件
【发布时间】:2014-06-29 18:49:18
【问题描述】:

我正在尝试将字典绑定到包含数据模板和 itemscontrol 的数据透视控件。但只出现一个没有内容的枢轴项。 我不知道我在这里做错了什么,所以如果有人可以帮助我找到错误或替代方案,那就太好了:)

这是 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;
}

调试时是这样的:

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

【问题讨论】:

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


    【解决方案1】:

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

    最简单但相当麻烦的方法是将您的字典转换为IEnumerable&lt;Tuple&lt;string,IEnumerable&gt;&gt;,其中第一项是键,第二项是值,或者只是创建一个包含键和值的类并使用它。

    【讨论】:

    • 我什至创建了一个 ObservableDictonary 类来实现 IDictionary、ICollection 等所有内容。但仍然没有显示任何内容。我会开设一个课程并尝试这种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多