2017-01-17 3 views
1

Я новичок в WPF и я пытаюсь связать список сгруппированных объекта к TabControl, и я просто удается получить на полпутиC# TabControl связывание с LINQ GroupBy заявление в WPF

Вот мой 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 за Tab, Я ожидал нескольких. что отсутствует, чтобы панель содержимого проходила через мою группу.

Когда я не группирую, у меня есть несколько tabItem с тем же именем, и это не то, что я ищу.

Мой класс Validation выглядит следующим образом:

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

P.S. Извините за мой английский, это не мой первый lanquage – user3704628

+0

Группа group собирается создать двумерный объект: >. Поэтому вам нужно перечислить список . – jdweng

+0

Как это сделать в xaml? – user3704628

ответ

1

Вы можете использовать ItemsControl в ContentTemplate в TabControl:

<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> 

Приведенный выше пример разметки будет отображать TextBlock за единицу в каждой группе в WrapPanel внутри каждого TabItem.

+0

Блестящий, именно то, что я ищу. спасибо – user3704628

 Смежные вопросы

  • Нет связанных вопросов^_^