我目前正在开发一个 C# WPF 应用程序,该应用程序允许您创建一个图形(即通过边连接的一堆顶点),然后使用这个图形作为模式在一堆其他(更大)图形中找到它( “主机”图)。每个图形元素至少有一个类型和一个标签。
模式图元素(边和顶点)可以有不同的“限制类型”。
例如,一个顶点可以有“这个顶点”标签必须是“顶点 A”或“这个顶点”类型必须在集合 {Type A,Type B,Type H} 中的限制。
对于边,限制类型有点困难。一条边可以被限制为“简单”边或“路径”边。模式图中两个顶点之间的路径边可以被认为是一个占位符,它允许您在宿主图中的两个顶点之间找到多个边(和顶点)。相比之下,简单边允许您在主机图中仅找到一条边(并且没有其他顶点)。
如果一条边有路径限制(而不是普通的边限制),它有一些附加属性,如最小路径长度或路径上允许的允许顶点类型。
类型限制结构可以在这个 UML 类图中看到:
~~~
现在从 UI 的角度来看:用户应该能够配置边缘是否有路径限制。如果有,用于附加设置的必要附加控件(文本框、列表框等)应自动出现。所有控件的更改都应自动反映在数据结构中。
以下是更改所选边缘的设置时用户界面的行为:( 实际上,在右侧还应该有一个滚动条,允许您向下滚动并配置路径上允许的边缘类型. 也暂时忽略顶点和边缘重叠设置。)
~~~
最后,我的问题归结为:
如何在保持 WPF 的数据绑定优雅的同时实现这样的动态对象类更改?(通过动态对象类更改,我的意思是通过单击“将此边缘视为路径”复选框,所选边缘将获得不同的限制类型。)
我真的必须创建一个老式的事件侦听器,当更改“将此边缘视为路径”复选框的值并使用它“手动”更新其他侧边栏控件的可见性时触发?
如果我以某种方式改变了我的限制类结构,它会有什么帮助吗?