Silverlight: последний элемент в ItemsControl - PullRequest
3 голосов
/ 29 декабря 2010

У меня есть 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 ]

4 голосов
/ 29 декабря 2010

Как насчет

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

с, на ваш взгляд, моделью что-то вроде

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

1 голос
/ 25 января 2011

Это раздражает, это не так просто решить с помощью конвертера.Фактически, если бы вы могли связываться с ConverterParameter (что невозможно в Silverlight v4), вы могли бы довольно легко достичь желаемого.

Если вы не хотите прикасаться к своей модели, я думаю, что вам лучше всего было бы создать новый класс, производный от ControlControl, который устанавливает собственную видимость на основе позиции границы в источнике элементов.Это не самое лучшее решение в мире, но оно поддерживает модель в чистоте.Это будет выглядеть в ItemsControl

  <local:ItemsControlVisibilityHelper ShowIfLast="False" ShowIfFirst="True"  ShowIfNotLastOrFirst="True"
                                                                    ItemsControl="{Binding ElementName=x_ItemsControl}"
                                                                    BoundItem="{Binding}"
                                                                    >
                                    <TextBlock Text=", "></TextBlock>
                                </local:ItemsControlVisibilityHelper>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...