Silverlight:ItemsControl中的最后一项

时间:2010-12-28 23:12:05

标签: silverlight xaml data-binding

我有一个ItemsControl。对于ItemsControl中的最后一项,我想隐藏包含逗号的TextBox。有没有办法使用XAML做到这一点?

        <ItemsControl>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Visibility="{Binding Value, Converter={StaticResource NotEmpty}}">
                        <TextBlock Text="{Binding QuestionName}" />
                        <TextBlock Text=" " />
                        <TextBlock Text="{Binding Answer}"/>
                        <TextBlock Text=", " />
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>

            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <toolkit:WrapPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>

2 个答案:

答案 0 :(得分:4)

怎么样

<TextBlock Text=", " Visibility="{Binding LastItemVisibility}" />

在您的视图模型中使用

public Visibility LastItemVisibility
{
    get { return MyCollection.LastOrDefault() == this ? Visibility.Collapsed : Visibility.Visible; }
}

答案 1 :(得分:1)

使用转换器解决这个问题并不容易。事实上,如果你可以绑定到ConverterParameter(这在Silverlight v4中是不可能的),你可以很容易地实现你想要的。

如果您不想触摸您的模型,我认为您最好的选择是创建一个派生自ControlControl的新类,它根据项目源中的bounditem的位置设置自己的可见性。它不是世界上最好的解决方案,但它保持模型清洁。它在ItemsControl中看起来像这样。

  <local:ItemsControlVisibilityHelper ShowIfLast="False" ShowIfFirst="True"  ShowIfNotLastOrFirst="True"
                                                                    ItemsControl="{Binding ElementName=x_ItemsControl}"
                                                                    BoundItem="{Binding}"
                                                                    >
                                    <TextBlock Text=", "></TextBlock>
                                </local:ItemsControlVisibilityHelper>