wpf listview gridview шаблон обмена предметами - PullRequest
0 голосов
/ 01 декабря 2009

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

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

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

Ответы [ 2 ]

1 голос
/ 02 декабря 2009

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

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

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

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

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

1 голос
/ 01 декабря 2009

Вы можете использовать DataTriggers. Используйте такой код (переключение шаблонов в зависимости от того, равно ли значение 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>

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

...