wpf listview шаблон элемента подкачки gridview

У меня есть представление списка, которое отображает данные с использованием сетки. Этот список отображает данные, типичные для представлений сетки. Много данных отображается в строках и столбцах. Однако в некоторых строках у меня нет данных для отображения в столбцах. Я хотел бы заменить шаблон элемента для этой строки и отобразить другой шаблон для всей строки, который будет отображать что-то вроде «пустой строки» или «пустой строки» для текста, а также стилизовать всю строку, а не отдельные ячейки.

Я пытался использовать этот пост: http://cloudstore.blogspot.com/2008/06/creating-custom-view-mode-that-supports.html.

Итак, у меня есть собственное представление для представления списка. По сути, я создал подкласс класса GridView, и в переопределении метода PrepareItems я могу выбрать новый шаблон, который я хочу отобразить для определенной строки, или шаблон по умолчанию. Однако, когда я пытаюсь выбрать новый шаблон, gridview никогда ничего не отобразит для этой строки. Он все равно будет отображаться, если я использую шаблон по умолчанию. Я предполагаю, что макет для GridView мешает моей настройке шаблона для строки, которую я хочу заменить. Возможно ли это, или мне придется создать собственное представление, которое имитирует GridView, а не подкласс класса GridView? Я хотел бы оставить столбцы такими, какие они есть, без особых переделок. Любые предложения или у кого-нибудь есть опыт работы с этим типом сценария?


person Community    schedule 30.11.2009    source источник


Ответы (2)


Вы можете использовать триггеры данных. Используйте такой код (переключение шаблонов в зависимости от того, равно ли значение SomeItemProperty 0 или нет):

<DataTemplate x:Key="MyItemTemplate">
    <StackPanel>
        <StackPanel Name="normalStackPanel">
            <!-- template for normal row -->
        </StackPanel>
        <StackPanel Name="emptyStackPanel" Visibility="Collapsed">
            <!-- template for empty row -->
        </StackPanel>
    </StackPanel>

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding SomeItemProperty}" Value="0">
            <Setter TargetName="normalStackPanel" Property="Visibility" Value="Collapsed" />
            <Setter TargetName="emptyStackPanel" Property="Visibility" Value="Visible" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

Надеюсь, поможет.

person levanovd    schedule 01.12.2009

Хорошо, вот что я сделал, чтобы решить свою проблему, однако это потребует некоторой доработки с моей стороны. Я заменил свой список элементом управления элементами. Поэтому я больше не использую GridView в виде списка. Вместо этого я определил GridViewColumnCollection с моими столбцами, настроенными так, как я хотел.

Для своего заголовка я использовал GridViewHeaderRowPresenter со свойством столбцов, привязанным к GridViewColumnCollection. Это касается заголовков столбцов.

Под своим заголовком я вставляю ItemsControl, который привязан к моему списку элементов. Однако теперь я использую DataTemplateSelector, который заменяет шаблон в зависимости от элемента и его свойств. Если вы не знакомы с селектором DataTemplate, перейдите сюда: data выбор шаблона

По сути, мой шаблон по умолчанию для элементов в списке — это GridViewRowPresenter, свойство столбцов которого привязано к GridViewColumnCollection. Это держит его в соответствии с заголовками. Тем не менее, я все еще могу заменить шаблон строки на что-то другое с помощью селектора шаблонов данных. И это решает мою проблему.

Однако теперь мне нужно переработать представление списка с представлением сетки, которое я создал, и использовать этот метод. Так что это не обходится без некоторых затрат.

person Community    schedule 01.12.2009