WPF - 从组标题样式中绑定(bind)到当前项目

标签 wpf xaml datagrid binding grouping

我是一个 WPF 菜鸟,所以请放轻松;-)

我正在尝试创建一个分组的 DataGrid(WPF 工具包版本)。
我已经成功创建了数据源、DataGrid 本身、所需的 CollectionViewSource 和组标题的样式(它使用扩展器)。

我想按一个名为“Assign_To”的属性进行分组,并在标题中显示相关值(分组项共享的值)。但是,我无法弄清楚如何绑定(bind)到当前组/项目以返回其 Assign_To 属性。

我得到的最接近(如下所示)是绑定(bind)到整个 CollectionViewSource,它为 Assign_To 返回一个固定值。为了返回“Assign_To”的正确值,绑定(bind)到当前项目/组的正确方法是什么?

希望有人可以提供帮助。谢谢!

安迪·T。

这里是源...

<Window DataContext="{Binding Source={StaticResource SampleDataSource}}"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    x:Class="DataGridTest.MainWindow"
    x:Name="Window"
    Title="MainWindow"
    Width="640" Height="480" mc:Ignorable="d">

    <Window.Resources>
        <CollectionViewSource x:Key="CVS" Source="{Binding MyData}">
            <CollectionViewSource.GroupDescriptions>
                <PropertyGroupDescription PropertyName="Assign_To"/>
            </CollectionViewSource.GroupDescriptions>
        </CollectionViewSource>

        <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GroupItem}">
                        <Expander IsExpanded="True">
                            <Expander.Header>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="Assign To: "/>
                                    <TextBlock Text="{Binding Source={StaticResource CVS}, Path=Assign_To}"/>
                                </StackPanel>                               
                            </Expander.Header>
                            <ItemsPresenter/>
                        </Expander>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    </Window.Resources>


    <Grid x:Name="LayoutRoot">
        <dg:DataGrid
         ItemsSource="{Binding Source={StaticResource CVS}}"
         SelectionUnit="CellOrRowHeader" 
         CanUserAddRows="False" 
         CanUserDeleteRows="False" 
         CanUserResizeRows="False">
         <dg:DataGrid.GroupStyle>
            <GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <dg:DataGridRowsPresenter/>
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
            </GroupStyle>
         </dg:DataGrid.GroupStyle>          
        </dg:DataGrid>   
    </Grid> 
</Window>

最佳答案

感谢您的回复。我真的很感激它,并会检查它是否有效。

无论如何,事实证明,经过一番戳戳和刺激,我只使用 XAML 解决了这个问题。我一直缺少的是组标题绑定(bind)到的每个项目都是。群组项目 并且 的默认 DataContext群组项目 收藏查看组 .反过来,一个 收藏查看组 有一个 项目 属性,这是一个集合,因此我可以获得 分配给 集合中第一项的值并在我的标题文本中使用它。像这样:

<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GroupItem}">
                        <Expander IsExpanded="True">
                            <Expander.Header>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="Assign To: "/>
                                    <TextBlock Text="{Binding Items[0].Assign_To}"/>
                                </StackPanel>       
                            </Expander.Header>
                            <ItemsPresenter/>
                        </Expander>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

关于WPF - 从组标题样式中绑定(bind)到当前项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147702/

相关文章:

wpf - ListView.ItemTemplate中的SharedSizeGroup

wpf - 如何更改按钮上 TextBlock 的文本?

c# - WPF Tabcontrol(TabItem 内容未出现)

c# - 基于 WPF 中的 TextBox Focus 更改图像颜色?

wpf - 设置数据绑定(bind) TabControl 的样式

c# - 如何将焦点设置在数据网格/ GridView 中的特定行?

c# - DataGridComboBoxColumn : how to set TextBinding

c# - Microsoft.Build 和 Microsoft.Web.Administration nuget 包之间的冲突

wpf - 我可以为 WPF 中的一系列键创建 KeyBinding 吗?

c# - 一旦 WPF DataGrid 单元格被编辑,MySQL 就会更新