C#TabControl与WPF中的linq groupby语句绑定

时间:2017-01-17 00:05:25

标签: c# wpf linq group-by

我是WPF的新手,我正在尝试将分组对象的List绑定到tabControl,我只是设法到达那里

这是我的C#代码在构造函数中:

IEnumerable<Validation> validations = ReflectiveEnumerator.GetEnumerableOfType<Validation>().Where(validation => validation.IsActive);

tabControl.ItemsSource = validations.GroupBy(validation => validation.TabName); 

我的xaml代码是:

<TabControl x:Name="tabControl" Margin="10,10,10,37" ItemsSource="{Binding Groups}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Key}"/>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <WrapPanel>
                <TextBlock Text="{Binding ValidationName}"/>
            </WrapPanel>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

所以我得到了一个按组的标签,这是我所期待的,但在我的包装面板中,我每个标签只有1个ValidationName,我期待多个。让内容面板通过我的小组迭代,缺少什么。

当我没有分组时,我有多个具有相同名称的tabItem,而这不是我正在寻找的。

我的验证课程如下:

public class Validation
{
    public string ValidationName {get; private set;}
    public string TabName{get; private set;}
    public bool IsActive{get; private set;}
}

1 个答案:

答案 0 :(得分:1)

您可以在TabControl的ContentTemplate中使用ItemsControl:

<TabControl x:Name="tabControl" Margin="10,10,10,37" ItemsSource="{Binding Groups}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Key}"/>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapPanel />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding ValidationName}" Margin="10"/>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

上面的示例标记将在每个TabItem内的WrapPanel中的每个组中显示每个项目的TextBlock。