我有一个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>
答案 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>