Граница WPF ItemsControl ItemTemplate с GroupStyle

Это первый раз, когда я публикую картинку, так что, надеюсь, она получится хорошей (картинка стоит тысячи слов, а я не хочу печатать тысячу слов). Но изображение ниже - это то, что я пытаюсь выполнить.

У меня есть коллекция объектов, которые мне нужны, сгруппированные по свойству "Группа". Я использую CollectionViewSource, привязанный к моему источнику данных, который выполняет группировку для меня.

Я использую элемент управления ItemsControl (но легко мог бы использовать и другой элемент управления) для отображения этой информации. Я могу сгруппировать информацию по свойству, но я хотел бы иметь возможность окружить всю группу рамкой. Я не хочу окружать каждый элемент в группе всей группой.

Как сделать что-то вроде рисунка ниже с рамкой вокруг всей группы?

альтернативный текст


person Miles    schedule 07.10.2010    source источник


Ответы (1)


что-то вроде этого должно помочь. используйте это как свой групповой стиль. Вы, вероятно, захотите настроить это больше, но вы сможете получить общую идею из этого фрагмента.

главное знать, что вы привязываетесь к GroupItem. В основном в GroupItem есть 3 свойства. Имя (группы), ItemCount (сколько элементов в вашей группе) и сами элементы.

<ControlTemplate TargetType="{x:Type GroupItem}">

    <Border BorderBrush="Black" BorderThickness="1" Margin="5">
        <StackPanel>
            <TextBlock Text="{Binding Name}"/>
            <Border BorderBrush="Black" BorderThickness="1" Margin="0,0,0,0">
                <ItemsPresenter />
            </Border>
        </StackPanel>
    </Border>

</ControlTemplate>

EDIT: когда вы группируете набор элементов, источником является не набор ваших элементов, а набор элементов GroupItem, который затем содержит элементы из вашей коллекции, принадлежащие этой группе. вот почему x:Type является GroupItem. Здесь не требуется никакой привязки, кроме свойств GroupItem, которые вы хотите отобразить.

Вы должны поместить это в свой <ItemControl> XAML следующим образом:

    <ItemsControl>
        <ItemsControl.GroupStyle>
<!-------------- style from above goes here --------------->
        <ItemsControl.GroupStyle/>
    <ItemsControl/>

здесь находится статья по группировке в WPF, чтобы помочь вам.

person Muad'Dib    schedule 07.10.2010
comment
Я не уверен, что вижу связь с тем, где вы помещаете это в свой XAML. Почему вы объявляете x:Type как GroupItem? Где вы привязываете источник элементов и где вы используете этот шаблон управления? - person Miles; 08.10.2010