是否可以使用基于List(Of XXX)的WPF DataGrid模板作为ItemsSource?

时间:2014-03-10 22:46:04

标签: wpf vb.net xaml datagrid

我非常感谢这个网站,您的专家以及强制活动的“游戏化”操作方式。当我出现在空中时,我会经历“无人接听”,但我很少找到足够简单的东西来回答...... :(

短版

需要Datagrid显示不同类的格式化/模板列表......不同。

版本稍长

窗口布局:

_______________________
|          |          |
| TreeView | DataGrid |
|__________|__________|

单击的TreeView节点确定DataGrid中显示的实体,并且每个类都有不同的列。

我只是想找出一种方法来显示DataGrid中基于类的每个列表(我的代码在点击时知道)。

恼人的长版

使用TreeView(尽管使用HeirarchicalDataTemplate),每个“级别”可以根据它所代表的类显示,如:

<TreeView.Resources>
    <HierarchicalDataTemplate 
        DataType="{x:Type local:Access_Group}"
        ItemsSource="{Binding Path=Access_Lists}">
        <TextBlock Text="{Binding Name}" />
    </HierarchicalDataTemplate>
    <HierarchicalDataTemplate 
        DataType="{x:Type local:Access_List}"
        ItemsSource="{Binding Path=Object_Groups}">
        <TextBlock Text="{Binding Name}" />
    </HierarchicalDataTemplate>
[...]

......生活很美好。是的,我理解在这个简单的问题/场景中,DataGrid数据不是分层的。我只是粘贴上面作为我当前如何使用TreeView的示例,因此为DataGrid调用不同的类...(< em>如果这无意中混淆了这个问题,请忽略不计!)

但是使用WPF DataGrid,它(至少在我的情况下)只列出单个Entity / Class的实例(基于单击的TreeView节点)。并不是说上面的技术问题,点击电视的每个“层”意味着该特定类中的List需要在DataGrid中。相信我,听起来比实际困难。让我试试这个......

让我们将其用作类的代表性示例:

Class A
    List of Class Bs

Class B
    List of Class Cs

Class C
    List of Class Ds
[...]

TreeView 逻辑

Class A
    Class B
Class A
    Class B
    Class B
        Class C
    Class B
Class A
    Class B
        Class C
        Class C
[...]

行。现在不幸的是,类A,B,C,......都是非常不同的类,只有很少的“列”。这意味着我无法在DataGrid中使用单个模板来显示它们。

我会玩下面的任何一种(或者我现在无法想象的另一种方法):

  1. 在代码隐藏中,我将一个模板应用到DataGrid(我已经知道在代码隐藏中的TreeView中的'clicked'类,所以我有我需要选择的dg列),或者......
  2. 在Window / Datagrid的XAML中,我列出了要表示的每个类的列布局(A类,B类,C类,...... a la AutoGenerateColumns =“False”)和不知何故,WPF计算出要使用的内容。
  3. 可能不相关的注意事项

    我无法显示每个类/实体的所有列,因为它们在数据库中。我只需要用户的1/2列,用户对DataGrid中的数据唯一做的就是检查/取消选中2列(“已检查”和“活动”),并进行更新。在极少数情况下,会删除DG中的整行,但这是一个特殊情况,我可以在以后处理多种方式。

    我研究的内容令人沮丧:

    可以使用WPF分层DataGrids,并调用正确的一个到堆栈顶部/可见,但这听起来很糟糕/可怕...必须有一个优雅的方式,我我希望你能提到任何指针,甚至是在单个DataGrid中显示不同类的实际经验...... :)请不要让我诉诸这个'胶带'解决方案/修复!!!

0 个答案:

没有答案