分层代码优先 EF 绑定到 WPF Treeview...不可能

2024-04-16

在过去,我不得不求助于使用数据集和数据表,因为使用绑定来做到这一点仍然让我困惑......

顶层:我在 VB 2012 中创建了一系列类,对它们进行了注释,并使用 Code First 在 EF6 中创建了 EF 模型。这个想法是表示路由器配置,配置的子部分是主要部分的子部分。非常简单的想法。

基本原理:使用简单的 WPF 树视图,说明配置部分和子部分(逻辑上)出现在路由器中的情况。

我非常简单地开始使用这些类,打算稍后使用 2 路绑定来更新每种方式等。以下是前 2 个顶级类(为简洁起见,进行了剪裁):

这是标准的 EF CodeFirst 费用,DBContext 由 EF 按照您的预期进行布局。这是顶级 2 级类(Access_Group 和 Access_List)的布局:

...EF-Land 一切都很好...

因为它可能很重要,所以这里是实际的 Access_Group 类:

Public Class Access_Group
    Inherits EntityTypeConfiguration(Of Access_Group)
    Implements IAccess_Group

    <Key>
    Public Property Access_GroupID As Integer Implements IAccess_Group.Access_GroupID
    Public Property Name As String Implements IAccess_Group.Name
    Public Property LastUpdated As Date Implements IAccess_Group.LastUpdated
    Public Property Active As Boolean Implements IAccess_Group.Active
    '------------------------------------------------------------------
    Public Property Access_Lists As ObservableCollection(Of Access_List) Implements IAccess_Group.Access_Lists
    Public Sub New()
        Me.Access_Lists = New ObservableCollection(Of Access_List)
    End Sub
End Class

有许多基于事件的组件我还没有添加,因为我只想在添加附加功能之前让基础功能发挥作用(在树视图中按层次结构显示)...

这就是在代码中创建类的方式,这些类首先填充数据库(SQL 2012):

[Window Class contd.]     
Private Sub AddData()
    Try
        ctx = New entitiesContext
        Dim d As Date = Now
        '--------------------------------
        Dim al As New Access_List
        ' lower classes not needed to be shown...
        With al
            .Active = True
            .Checked = True
            .LastUpdated = d
            .Name = "some access-list at " & d.ToLongTimeString
        End With
        '--------------------------------
        Dim ag As Access_Group = New Access_Group
        With ag
            .Access_Lists.Add(al)
            .Active = True
            .LastUpdated = d
            .Name = "some access-group at " & d.ToLongTimeString
        End With
        '
        ctx.Access_Groups.Add(ag)
        '
        Dim i As Integer = ctx.SaveChanges()
        Console.WriteLine("Seed complete! -> " & i)
    Catch ex As Exception
        Dim exText As String = "Seed Failed "
        Console.WriteLine(exText & "(Message): " & ex.Message)
        Console.WriteLine(exText & "(ToString): " & ex.ToString)
        Console.WriteLine(exText & "(StackTrace): " & ex.StackTrace)
        Console.WriteLine("EntityValidationErrors: ")
        For Each eve As System.Data.Entity.Validation.DbEntityValidationResult In ctx.GetValidationErrors()
            Console.WriteLine("eve: OK? " & eve.IsValid & " - " & eve.Entry.ToString)
            For Each devr As System.Data.Entity.Validation.DbValidationError In eve.ValidationErrors
                Console.WriteLine("devr invalid property: " & devr.PropertyName)
                Console.WriteLine("devr error message : " & devr.ErrorMessage)
            Next
        Next
    End Try
End Sub

您会看到上面提到的 Access_List 作为第二层,这就是该类:

Public Class Access_List
    Inherits EntityTypeConfiguration(Of Access_Group)
    Implements toag.entities.IAccess_List

    <Key>
    Public Property Access_ListID As Integer Implements IAccess_List.Access_ListID
    Public Property Name As String Implements IAccess_List.Name
    Public Property LastUpdated As Date Implements IAccess_List.LastUpdated
    Public Property Active As Boolean Implements IAccess_List.Active
    Public Property Checked As Boolean Implements IAccess_List.Checked
    Public Property Object_Groups As ObservableCollection(Of Object_Group) Implements IAccess_List.Object_Groups
    Public Sub New()
        Me.Object_Groups = New ObservableCollection(Of Object_Group)
    End Sub
End Class

如果我能弄清楚如何让这两个类发挥作用,我就可以模板化并让其余的类也这样做......

我已经尝试了数百种代码和 XAML 组合,所以我将选择至少显示的一种某物在树视图上:

<TreeView Grid.Column="0" 
    x:Name="ACLTreeView" 
    HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" 
    ItemsSource="{Binding Access_Group}">
</TreeView>

当此 XAML 与此代码隐藏组合时:

Public Class ConfigWindow

    Property ctx As entitiesContext
    Public Access_Group_List As IEnumerable(Of Access_Group)

    Sub New()
        ' This call is required by the designer.
        InitializeComponent()
       Startup()
    End Sub

    Public Sub Startup()
        Try
            ctx = New vASAContext
            Me.Access_Group_List = From ag In ctx.Access_Groups Select ag
            Me.ACLTreeView.ItemsSource = Access_Group_List.ToList
        Catch ex As Exception
            Debug.Print("ex: " & ex.Message)
        End Try
    End Sub

End Class

将产生以下结果:

(抱歉不得不混淆命名空间......)这很好,因为 XAML 中没有 HierarchicalTemplate 甚至 TreeViewItem。

这是修改后的 XAML:

...这将显示 Access_Group 实体的 Name 属性,而不是它的类名 [编辑帖子时无法添加它的屏幕截图,因此您可能必须相信我! :)]

但是 Window 类中的另一个子项指出了层次结构可能无法被识别的问题。难道是我一直在尝试正确的示例,而我的 EF 类设置不正确?该子项应显示所有元素及其子元素:

Public Sub PrintDebug(TheList As IEnumerable(Of Access_Group))
    For Each ag As Access_Group In TheList
        Console.WriteLine("=======================================")
        Console.WriteLine("ag: " & ag.Name & " has " & ag.Access_Lists.Count & " Access_List entries")
        For Each al As Access_List In ag.Access_Lists
            Console.WriteLine("ag -> al: " & al.Name & " has " & al.Object_Groups.Count & " Object_Group entries")
            For Each og As Object_Group In al.Object_Groups
                Console.WriteLine("ag -> al -> og: " & og.Name & " has " & og.Network_Objects.Count & " Network_Object entries")
                '...
            Next
        Next
        Console.WriteLine("=======================================")
    Next
End Sub

但这就是调试类输出的内容:

=======================================
ag: some access-group at 5:00:49 PM has 0 Access_List entries
=======================================
=======================================
ag: some access-group at 5:08:56 PM has 0 Access_List entries
=======================================
=======================================
ag: some access-group at 5:09:14 PM has 0 Access_List entries
=======================================
=======================================
ag: some access-group at 5:12:31 PM has 0 Access_List entries
=======================================
[...]

?这是否意味着我的 Treeview 没有机会?但是,但是...数据库中的数据是正确的:

当我使用上面的代码时,所有这些键都由 EF 填充(仅在填充 ObservableCollections 后保存顶级类 (Access_Group)...)

???

我已经尝试了 HierarchicalTemplate 的每种组合、网格/窗口资源、嵌套等。三天后我又回到了方 1...:) 是的,还有各种 LINQ 查询...现在我正在考虑 SQL (GASP)或 LINQ/SQL 中的 JOIN,但如果我准备好真正放弃的话,我也可能会一直回到 DataSets 和 DataTables...

感谢任何帮助...我只是无法继续,直到我能让这些实体正确绑定...


我已经创建了您的实体的示例对象模型(访问组、访问列表和对象组),此代码可能会帮助您:

代码隐藏

Imports System.Collections.ObjectModel

Class MainWindow

    Property AccessGroups As New ObservableCollection(Of AccessGroup)

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

       ' Add any initialization after the InitializeComponent() call.
        Me.DataContext = Me

        Dim ag1 = New AccessGroup With {.Name = "AG1"}
        Dim ag2 = New AccessGroup With {.Name = "AG2"}

        Dim al1 = New AccessList With {.Name = "AL1"}
        Dim al2 = New AccessList With {.Name = "AL2"}
        Dim al3 = New AccessList With {.Name = "AL3"}

        Dim og1 = New ObjectGroup With {.Name = "OG1"}
        Dim og2 = New ObjectGroup With {.Name = "OG2"}

        al1.ObjectGroups = New List(Of ObjectGroup) From {og1}
        al2.ObjectGroups = New List(Of ObjectGroup) From {og2}

        ag1.AccessList = New List(Of AccessList) From {al1, al2}
        ag2.AccessList = New List(Of AccessList) From {al3}

        AccessGroups.Add(ag1)
        AccessGroups.Add(ag2)
    End Sub
End Class

Public Class AccessGroup
    Property Name As String
    Property AccessList As IEnumerable(Of AccessList)
End Class

Public Class AccessList
    Property Name As String
    Property ObjectGroups As IEnumerable(Of ObjectGroup)
End Class

Public Class ObjectGroup
    Property Name As String
End Class

XAML

<TreeView ItemsSource="{Binding AccessGroups}">
    <!-- AccessGroup template -->
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding AccessList}">
            <TextBlock Text="{Binding Name}" />

            <!-- AccessList template -->
            <HierarchicalDataTemplate.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding ObjectGroups}">
                    <TextBlock Text="{Binding Name}" />

                    <!-- ObjectGroup template -->
                    <HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Name}" />
                        </DataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>

                </HierarchicalDataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>

        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

在下图中你可以看到结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分层代码优先 EF 绑定到 WPF Treeview...不可能 的相关文章

  • 实体框架:为什么实体类的集合类型需要在默认构造函数中实例化?

    我正在使用 Visual Studio 构建代码优先模型北风自动数据库 我有一些疑问 我发现如果实体类有一个集合 那么该集合总是在默认构造函数中实例化 为什么我们需要这样做 The ICollection
  • 当列不是 PK 时,EF6 MySQL StrongTypingException

    我们在 VS 2013 中使用 MySql 和 Entity FrameWork 这些是已安装的工具 MySql服务器5 7 8 MySql 工作台 6 3 MySql for Visual Studio 1 2 4 连接器 NET 6 9
  • VB.NET 或 C# 中父类的子类与基类的派生类有什么区别?

    问完问题后调用需要在 VB NET 或 C 中键入为基类的派生类实例的方法 https stackoverflow com questions 13024688在 Stack Overflow 上 我被告知我在提问时使用了错误的术语 我使用
  • 将面板添加到 Datagridview

    我想将面板放入包含一组控件的列中 并将其放入 datagridview 中 我怎么能这么做呢 因为标准方法允许添加复选框 按钮 组合框等 但我找不到如何放置简单的面板 谢谢你的帮助 面板控件也继承自控件类 因此您可以像添加任何其他控件一样添
  • C# WPF - 应用程序图标 + ShowInTaskbar = False

    我创建了一个具有以下属性的自定义分层 WPF 窗口 允许透明度 True 在任务栏显示 False 背景 透明 最上面 True 图标 图标 ico 我已在 项目属性 gt 应用程序 选项卡下添加了 Icon ico 如果 ShowInTa
  • Structure 中的无参数构造函数

    继从这个问题 https stackoverflow com q 32122660 592111关于在中使用不同的 Visual Basic 版本Visual Studio 2015 http en wikipedia org wiki M
  • 设置不可调整大小的 GridViewColumn

    我在 C WPF 应用程序中使用 ListView 和 GridViewColumn 对于某些列 我使用可见性管理器 this one https stackoverflow com a 9634769 6479770 但是 当第 1 列和
  • 使用 C# 从 UIElement 截取 WPF 屏幕截图 JPG

    我正在尝试从我的 WPF 应用程序的一部分创建 JPG 就像截图一样 只是个人的UIElements 我从这里开始 http www grumpydev com 2009 01 03 take wpf screenshots http ww
  • CanExecute 何时被调用?

    在演示中 我有一个按钮可以切换布尔字段isAsking 我创建了一个命令 该命令仅在以下情况下执行isAsking true 一旦我按下切换按钮 okButton IsEnable立即更改 这表明该命令发现了更改isAsking 我感到很困
  • WPF 用户控件;触发器和更改其他控件

    我创建了一个 WPF UserControl 其中包含一个按钮和一个组合框 我想根据鼠标的位置更改两者的样式 因此鼠标悬停的 UIElement 的颜色为黑色 另一个的颜色为红色 如果两者均未设置样式 则将应用默认样式 别担心 这个噩梦般的
  • 快速变化的集合 MVVM WPF - 高 CPU 使用率和 UI 几乎冻结

    我正在开发一个带有数据网格的应用程序 它显示某些正在运行的 Windows 进程 在我的示例 Chrome 进程中 当选中复选框时 数据网格会加载进程 要求 显示每个进程的名称 内存使用情况 私有工作集 的 实时 信息 就像在 Window
  • 如何用ListBox制作自定义控件?

    我想用自定义的项目模板制作水平ListBox 所以我制作了它的基本模板 但是 我找不到将 事物 绑定到 WPF XAML 的示例 尤其是在 ListBox 填充了自定义项的情况下 我只是想动态添加 删除列表框中的项目 其中包含图像 标签 组
  • 实体框架 4 将订单链接到拥有 10,000 个订单的客户非常慢

    这个把我难住了 我有一个客户和订单实体 客户可以有多个订单 当我创建新订单并设置 Customer 属性 Order Customer customer 时 如果客户有 10 000 个订单 则会有很长的延迟 20 秒 在添加这个新订单之前
  • 在 SVG 中旋转形状时保持旋转线性渐变不旋转

    SVG 或 WPF XAML 我对两者都持开放态度 并且需要 我不认为它们在实现上有任何不同 下面的示例是 SVG 中的 我试图找到一种在线性渐变上使用旋转的方法 在本例中为 270 但是当它填充的形状旋转时 保持线性渐变不变 就好像它填充
  • 尝试获取类型 LogWriter、键“”的实例时发生激活错误?

    我有 ASP NET 网站 我添加了参考Microsoft Practices EnterpriseLibrary Logging dll到该网站 在 web config 文件中 定义如下
  • 将参数传递给 .NET 定义的命令

    我需要在 Autocad 2000i 的命令行上编写一个命令 并且希望 autocad 提示输入参数 然后我的 vb net 程序将根据收到的参数进行操作 基本上我想我的解决方案都在这里 http through the interface
  • 为什么实体框架 6 在插入后不只选择scope_identity()?

    当您使用 EF 6 1 保存实体时 将生成并执行以下 SQL 代码 exec sp executesql N INSERT dbo Customers Name FirstName VALUES 0 1 SELECT CustomerId
  • 设置域实体的身份

    域中的所有实体都需要具有身份 通过继承自DomainEntity 我能够为类提供身份 城市域实体 为了方便阅读而进行了精简 public class City DomainEntity IAggregateRoot public strin
  • CommandBar AppBarButton 图标大小

    我正在尝试重新设计我的CommandBar AppBarButton图标看起来像日历 邮件等 Microsoft 应用程序 正如您在下面看到的 Microsoft Apps 图标比我的更大 更光滑 更薄 并且具有鲜艳的白色 我尝试过应用资源
  • 在wpf中移动鼠标

    我目前正在寻找一种在 wpf 中移动鼠标的方法 我发现的只是我无法可靠实现的非托管方法调用 有没有一种简单的方法可以将鼠标光标移动到某个地方 即 双击后 我肯定在这里遗漏了一些东西 添加对System Windows Forms dll的引

随机推荐

  • 获取控制器中的当前区域性 asp.net-core

    我已经为我的视图设置了文化并更改了控制器中的文化 但我似乎无法找到如何知道我当前在控制器中使用的文化 我正在寻找类似的内容 public class HomeController Controller public async Task
  • 在android studio中使用java解析m3u文件

    我正在寻找用java解析m3u文件 频道名称然后是它的链接我已经用谷歌搜索过这个但无法找到解决方案 m3u 文件如下所示 EXTM3U EXTINF 1 VIP AR Bein Max 1 HD http portal onlineiptv
  • 玩超级卷轴中的固定元素

    我正在构建一个视差网站使用超级卷轴画 http johnpolacek github io superscrollorama 其中使用 jquery 和 css3 有一些逐帧动画 但最终这样做后 我遇到了一个问题 我正在尝试使用一些滚动插件
  • 对于相同的远程 URL,“git clone ...”有效,但“pip install ...”无效

    我想通过 pipelinenv 或 pip virtualenv 从私有的 可通过 ssh 访问的远程存储库安装包 当克隆工作时 git clone git remoteurl username package git 直接安装不会 pip
  • Kotlin 返回 Null 不能是非 null 类型的值

    我正在尝试为 Kotlin 函数返回空值 它给了我错误Null cannot be a value of a non null type 但我希望能够返回 null 尽管看起来该函数可以为 void 但它是一个接口重写 在这种情况下没有返回
  • 在 .NET 4.6 项目中引用 .NET Core 库

    也许我不明白 NET Core Library 的含义 但是当我尝试使用 Visual Studio 2015 在 NET 4 6 程序集中添加 NET Core Library 时 出现错误 无法添加对 的引用 我是不是理解错了什么 这是
  • codeigniter echo 查询结果数组

    模型内部的方法 public function get fichas query this gt db gt query SELECT FROM fichas return query gt result 然后 我尝试将此数据传递给控制器
  • 如何在 Python 中通过 Swig 使用 float **?

    我正在为一些 c 函数编写 swig 绑定 这些函数之一需要一个浮点数 我已经在使用了指针 i http www swig org Doc1 3 Library html Library nn4对于正常的指针并进行了研究卡瑞斯 i http
  • 长文本在 ICS 上会转到下一行,但在 GB 及以下版本上不会

    我第一次注意到这一点是在 AlertDialogs 中将整个消息放在第一行 即使我指定了新行 n 在 ICS 上它显示正确的方式 但对于我的生活 我无法让它在 GB 上工作 最近我又遇到了 我看不出它在 ICS 上运行良好但在 GB 及以下
  • 使用连续内存并具有保留功能的映射和集合

    我使用了几张地图和套件 缺乏连续内存以及大量的分配 解除 是性能瓶颈 我需要一个主要与 STL 兼容的映射和集合类 它可以将连续的内存块用于内部对象 或多个块 它还需要有一个reserve函数 以便我可以预先分配预期的大小 在我自己编写之前
  • 如何在循环期间的任意时刻检查按键按下情况?

    我正在尝试制作一个倒数到 0 然后开始向上计数的计时器 我正在使用时间和键盘模块 这keyboard https pypi org project keyboard来自 PyPi 的模块 一切都按预期进行 我可以按一个按钮关闭程序 但它只在
  • C# Linq where 子句作为变量

    我正在尝试创建一个 LINQ 语句 其中 where 子句来自变量 例如 string whereClause address zip 23456 var x from something in someList where whereCl
  • 如何使可变参数模板类方法将函数指针作为参数,并使用从函数模板派生的类型?

    抱歉 标题很拗口 我正在研究一个类似于所讨论的数组类here https stackoverflow com questions 26766617 我想定义一个 映射 函数 它接受用户定义的函数并将其应用于数组的每个元素 出于类型检查的目的
  • 表单标签的 CSS 样式

    据我所知 一个
  • Java、HashMap 和使用字符串作为键 - 字符串值是否会存储两次?

    如果我有一个如下所示的 HashMap HashMap
  • Viewpager 延迟加载数据

    ViewPager有一个公共函数setOffscreenPageLimit http developer android com reference android support v4 view ViewPager html setOff
  • MVC 3 列表的不引人注目的验证

    Question 我创建了一个服务器端属性级别验证属性 但我没有将其应用于单个字段 而是将其应用于列表 这使我能够从整体上验证模型 我现在需要知道如何使用 MVC 3 中内置的不显眼的客户端验证将其转换为工作 我当前的代码如下来说明我的问题
  • div背景图片+jquery的幻灯片

    我在标题处有一个大的 div 元素 div 中有很多文本内容和一些框 我有一个大的 img 作为这个 div 的背景 现在我需要为这个 div 的背景制作一个幻灯片 如何为 div 的背景图像制作幻灯片 我研究了很多 但找不到任何东西 多谢
  • Bash if 语句中何时需要方括号?

    通常 我在 if 语句中使用方括号 if name Bob then 但是 当我检查是否grep成功了我不使用方括号 if grep q text file then 什么时候需要方括号if陈述 方括号是同义词test命令 一个if语句检查
  • 分层代码优先 EF 绑定到 WPF Treeview...不可能

    在过去 我不得不求助于使用数据集和数据表 因为使用绑定来做到这一点仍然让我困惑 顶层 我在 VB 2012 中创建了一系列类 对它们进行了注释 并使用 Code First 在 EF6 中创建了 EF 模型 这个想法是表示路由器配置 配置的