渲染集合的集合 - ItemsControl

时间:2013-07-08 10:11:36

标签: wpf

我有一个如下对象模型:

public class ViewModel
{
 public List<Group> Groups{ get; set; }
}

public class Group
{
    public string Name { get; set; }
    public List<Contact> Contacts { get; set; }
}

public class Contact
{
    public string Name { get; set; }
    public bool IsOnline { get; set; }
}

我将这些组绑定到这样的itemscontrol:

  <ItemsControl  ItemsSource="{Binding Path=Groups}"
       ItemTemplate="{StaticResource GroupTemplate}" >
    </ItemsControl>

我有渲染它们的datatemplate。

       <DataTemplate x:Key="GroupTemplate" DataType="{x:Type Group}">
       </DataTemplate>
 <DataTemplate x:Key="ContactTemplate" DataType="{x:Type Contact}">
<StackPanel>
<TextBlock Text="{Binding Name}"/>
</StackPanle>
       </DataTemplate>

如何在项目控件中显示联系人?联系人是每个组内的集合,我的viewmodel有一组组。为了进一步复杂化,我为不同的联系人提供了不同的数据模板,我应该使用datatemplateselector来选择合适的联系人模板。另请注意,我没有在组模板中显示任何内容,我只需要显示联系人。

谢谢, -Mike

1 个答案:

答案 0 :(得分:1)

在第一个模板中使用另一个ItemsControl:

<DataTemplate x:Key="GroupTemplate" DataType="{x:Type my:Group}">
    <ItemsControl ItemsSource="{Binding Contacts}">
        <ItemsControl.ItemTemplate>
            <DataTemplate DataType="{x:Type my:Contact}">
                <TextBlock Text="{Binding Name}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</DataTemplate>

使用模板选择器:

<DataTemplate x:Key="GroupTemplate" DataType="{x:Type my:Group}">
  <ItemsControl ItemsSource="{Binding Contacts}"
                ItemTemplateSelector="{StaticResource yourContactItemSelector}"/>
 </DataTemplate>