C# 将数据绑定到嵌套的参数化类
好的,我有一类复杂的结构,假设它的对象是这样的:C# 将数据绑定到嵌套的参数化类,c#,object,reflection,data-binding,field,C#,Object,Reflection,Data Binding,Field,好的,我有一类复杂的结构,假设它的对象是这样的: object theClass { object smallerClass1 { field A field B } object smallerClass2 { object smallerClass3 { field C } field D field E
object theClass
{
object smallerClass1
{
field A
field B
}
object smallerClass2
{
object smallerClass3
{
field C
}
field D
field E
}
field F
}
每个字段可以是任何值类型
我还有一个由表单组成的接口。此表单包含一个面板,可能包含或不包含更多面板,可能包含或不包含更多面板,可能包含或不包含更多面板,等等。每个面板可以包含任意数量的文本框,这些文本框表示上部对象中的字段。像这样:
Form form
{
panel panel1
{
textbox D
textbox C
}
panel panel2
{
panel panel3
{
textbox A
textbox F
}
textbox E
}
}
因此,并非所有字段都必须表示(例如,在这种特殊情况下,字段B缺失)
面板是将其他面板和/或文本框作为参数的对象
textbox将字段作为参数(它们都是panel/textbox类的扩展)
表单也会相应地被构造
现在问题来了。我需要文本框中的更改直接反映在字段的值中。如果一个文本框被更改,它从中提取数据的字段必须用一个新的值更新(我可以在失去焦点事件中处理类型转换,如果类型不匹配,只恢复上次的更改)。不必使用字段更新textbox,因为字段将是常量(除非通过textbox更改)
但是,我无法通过传递对我的对象(和/或它包含的任何对象)的引用来在我的textbox类中生成一个方法,该方法将在适当的时候更改字段
由于我正在使用文本框中的未定义(泛型?)类型,因此设置反射很困难。数据绑定也是一个问题,因为我无法将对象的引用传递给无限数量的嵌套对象(它只适用于lambda函数的第一级深度,任何深度,我将它绑定到参数对象,而不是实际对象)
那么,我如何处理这个问题,而不必为每个字段构造和指定文本框呢?我可能会为我遇到的每种类型构造一个单独的类,这将使我能够通过反射来解决这个问题,但我希望有一个更优雅的解决方案,因为在这种情况下,反射基本上是欺骗
有什么想法吗?我不确定我是否完全理解这个问题,但是如何将字段包装到observer类中,该类将侦听文本框的
ValueChanged
事件?通过反射,您可以根据这些观察者在树中的深度将其分派到指定的GUI控件,并让他们收听应该工作的事件。我有没有办法不用为每个字段编写单独的观察者类就可以做到这一点?泛型:observer,其中TValue:struct