1

以下のようなオブジェクトモデルがあります。

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  ItemsSource="{Binding Path=Groups}"
       ItemTemplate="{StaticResource GroupTemplate}" >
    </ItemsControl>

それらをレンダリングするためのデータテンプレートがあります。

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

項目コントロール内に連絡先を表示するにはどうすればよいですか? 連絡先は各グループ内のコレクションであり、ビューモデルにはグループのコレクションがあります。さらに複雑にするために、連絡先ごとに異なるデータ テンプレートがあり、適切な連絡先テンプレートを選択するために datatemplateselector を使用する必要があります。また、グループ テンプレートには表示するものがなく、連絡先のみを表示する必要があることに注意してください。

ありがとう -マイク

4

1 に答える 1

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>
于 2013-07-08T10:34:12.673 に答える