observableCollection中每个对象的不同视图

时间:2012-03-29 08:11:56

标签: wpf xaml

我想使用WrapPanel。我有一个带有ViewModels的ObservableCollection,它们都有自己的视图。有没有办法使用DataTemplates并使用多个视图?

这就是我现在正在做的事情:

<DataTemplate x:Key="ProjectInfoDetailTemplate"> <!-- DataType="{x:Type viewModels:ProjectInfoViewModel} -->
        <views:ProjectInfoView MouseLeftButtonDown="ProjectInfoView_MouseLeftButtonDown"/>
    </DataTemplate>

<ItemsControl Grid.Row="1" Grid.Column="0"
                  ItemsSource="{Binding AllProjects}"
                  ItemTemplate="{StaticResource ProjectInfoDetailTemplate}" Margin="0,15,0,0">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel>
                    <WrapPanel.Resources>
                        <Style TargetType="{x:Type views:ProjectInfoView}">
                            <Setter Property="Margin" Value="10" />
                        </Style>
                    </WrapPanel.Resources>
                </WrapPanel>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>

但是observableCollection AllProjects中的每个项都需要一个自己的视图。

你怎么能这样做?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用ItemTemplateSelector为每个项目提供正确的模板。或者您可以在不使用x:Key但是设置了TargetType的情况下创建DataTemplates,并且不在ItemsControl上指定ItemTemplate。这样wpf就能找到正确的DataTemplate。