gpt4 book ai didi

c# - 具有多个源数据和分组列的 WPF DataGrid

转载 作者:行者123 更新时间:2023-11-30 12:10:15 25 4
gpt4 key购买 nike

我是 WPF 的新手,我正在尝试制作一个控件来显示来自多个源对象的数据。源对象存储在我的 View 模型中的一个集合中,每个项目都有一个名称和一个数据对象集合。每个数据对象都有一些代表它的属性。数据结构看起来像这样:

在 View 模型中

ObservableCollection<MySourceObjectType> sourceItems {get; set;}

我的来源对象类型:

SomeType Name {get; set;}
SomeType Number {get; set;}
IList<MyDataObjectType> {get; set;}

我的数据对象类型:

SomeType data1 {get; set;}
SomeType data2 {get; set;}
SomeType data3 {get; set;}

我希望我的网格看起来像这样:

Sample grid layout

除了该布局之外,控件还需要支持对与每个源对象相对应的列组进行重新排序,并且所有行都需要一起垂直滚动,就好像它们都在同一个数据网格中一样。列和组标题也需要卡住在顶部,以便无论滚动位置如何,它们都可见。各个列不应该能够相对于彼此重新排序,并且列组必须始终保持在一起。源项可以是任意大小的集合,因此我无法预定义组,但每个组中的列都是预定义的并且不会更改。

目前,我通过使用 ListBox 并将其 ItemSource 绑定(bind)到 sourceItems 来实现这一点。 ItemsPanel 是一个停靠面板,带有用于 super 标题的文本框和用于显示每个项目数据的数据网格。我可以使用一堆事件处理程序通过拖放对它们进行重新排序,我还可以将滚动与事件处理程序同步。当前的重新排序是获取对源集合的引用,并在发生违反 mvvm 的放置时重新排序。

除了为每个项目使用单独的 DataGrid 之外,我想知道是否有更好、更简洁的方法来执行此操作。我试过为每个项目自动生成列,然后单元格模板将是另一个 DataGrid。我想不出如何让它工作,而且似乎没有比由 DataGrid 本身处理的组重新排序更好的了。

我目前的想法是,我必须为 GroupedDataGrid 或其他任何东西创建一个自定义控件,并赋予它重新排序组的能力,但我肯定对完成任务的更简单方法感兴趣。

我的基本要求是它必须严格遵循 MVVM 并且我的主要 xaml 布局不能有任何代码隐藏。我想如果背后的代码是最少的并且纯粹是 UI 操作,我可以勉强通过,但没有代码背后是理想的。

有什么想法吗?

最佳答案

这将是一个部分答案,因为提供一个实现需要一些时间,但既然我对此很感兴趣,我稍后会尝试为您提供一个实现。

您需要做的是使用分组,

  1. 为您的对象添加一些公共(public)属性,例如将它们区分开来

     public Type GroupType
    {
    return typeof(...);
    }

或者一个枚举

     public EGroupType GroupType
{
return EGroupType.GroupA;
}

2。供应GroupItem Style + ControlTemplate ,一个 gridview 或 datagrid,它的 itemssource 绑定(bind)到 GroupItems , 从链接中将 itemscontrol 替换为数据网格。

3.为 GroupBox 提供样式 + 控件模板,其中包含一个 ScrollViewer . 这是我需要进一步检查自己的事情,我相信这与

 <ScrollViewer>
<ContentPresenter />
</ScrollViewer>

在提供 GroupItem 模板时应该这样做。

4.组。

    <CollectionViewSource Source="{Binding sourceItems}" x:Key="cvs">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="GroupType"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

在您的窗口中。

    <GroupBox ItemsSource={StaticResource cvs} />

关于c# - 具有多个源数据和分组列的 WPF DataGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com