wpf - 访问 WPF DataGrid GroupItem DataTemplate 中的基础 ViewModel 属性

标签 wpf data-binding datagrid datatemplate collectionview

我有一个分组的 WPF DataGrid(标准 Microsoft 数据网格),代表用户界面上的一些数据。

为了显示分组区域内的总计,我们将在 XAML 中重写 GroupItem DataTemplate,如下所示:

<Style TargetType="{x:Type GroupItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupItem}">
                <Border BorderBrush="DarkGray" BorderThickness="1" Padding="12,0">
                    <Expander VerticalContentAlignment="Center" IsExpanded="{Binding ., Converter={Converters:ExpandedGroupConverter}}" ExpandDirection="Up">
                        <Expander.Header>
                                <Canvas>
                                **<TextBlock Text="{Binding} />**
                            </Canvas>
                        </Expander.Header>
                        <ItemsPresenter/>
                    </Expander>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

目前,在运行时,TextBlock 文本绑定(bind)到 DataContext,它是一个 CollectionViewGroup,这很有意义,因为网格绑定(bind)到包装我们数据源的 CollectionView。

但是,CollectionViewGroup 非常有限,不允许我们访问其包含的 ViewModel,我们在其中存储属性,例如放置组的位置(当我们第一次布局网格时,我们从列中收集坐标),并且需要绑定(bind)到它们,这样我们就可以在组中的给定列的上方/下方显示总计。

简而言之,我们尝试从针对 GroupItem 的 DataTemplate 中访问的不仅仅是 CollectionView 对象。任何有关如何执行此操作的意见(或者是否有更好的方法来获取每列的总计以在组总计模板中显示),我们将不胜感激。

编辑:到目前为止,解决方法是在我们的项目上有一个“Parent ViewModel”属性,尽管这会使模型膨胀,但我希望有一种更直接的方法来做到这一点。

最佳答案

CollectionViewGroup 使您可以访问该组中包含的所有项目。如果您想从模板中访问其他信息,可以尝试使用 RelativSource 进行绑定(bind)。

编辑:

因此,如果您有一个 ItemVM 集合,并且在此之上有一个 ItemVM.GroupProperty 上的 CollectionViewGroup。然后您可以使用以下命令访问组中的第一个 ItemVM

 Binding={ Path = Items[0].AnyPropertyOnItemVM }

如果您想计算或对 GroupItem 执行任何操作,我认为您必须使用转换器

关于wpf - 访问 WPF DataGrid GroupItem DataTemplate 中的基础 ViewModel 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5457776/

相关文章:

WPF 数据绑定(bind) CheckBox.IsChecked

c# - Winform 控件上的双向数据绑定(bind)动态对象

asp.net - 如何将 CssClass 应用于 DataGrid HyperLinkColumn 的标题单元格?

Python:创建网格

c# - 使用 LINQ2SQL DataContext 表作为其 ItemsSource 时使用 DataGrid 的正确方法(最佳实践)

WPF应用程序

c# - 创建一个带有圆角的自定义形状按钮

wpf 鼠标悬停填充矩形

python - Python 中的数据绑定(bind)/数据转换

c# - 在自定义 View 上设置可绑定(bind)属性时 ListDictionaryInternal 上的空引用异常