2012-02-28 75 views
1

标题听起来可能有些奇怪,所以我会尽力解释我的问题:绑定类到另一个类的属性

可以说我有拥有一些信息类:

class InfoHolder 
{ 
    public int MyInfo1 {get; set;} 
    public int MyInfo2 { get; set; } 
} 

然后,我有另一个类,做一些事的信息:

class InfoGUIRepresenter 
{ 
    // Display an int in some kind of GUI 
    // Allow the user to change the int via the GUI 
} 

现在我需要的申述类的两个对象,揭露我的资讯类用户:用于两个相关信息的一个申述。为了达到这个目的,将每个属性作为某种“参数”传递给我们的代理类是很好的。 但是当然这在C#中是不可能的。另一个解决方案是传递属性的名称,然后使用反射来访问它们 - 不是很好!

有没有解决这个问题的方法?也许某种解决这种问题的架构? 谢谢!

回答

3

一种选择是传递两个代表 - 一个setter和一个用于吸气:

var holder = new InfoHolder(); 

var representer = new InfoGUIRepresenter(() => holder.MyInfo1, 
             value => holder.MyInfo1 = value); 

然后你InfoGUIRepresenter构造将采取Func<int>Action<int>。 (或者你可以让代表通用,为不同类型的财产。)

0

你提到显示“在某种GUI”,这意味着你正在使用的GUI框架。毫无疑问,该框架支持针对这种情况的明确模型。例如,如果您使用WPF,MVVM(您的info对象是模型,您的UI是一个视图,您可以通过绑定到UI元素属性的视图模型属性从视图到模型进行绑定)。即,你是不是想在这里重新发明轮子?

+0

其实GUI框架是我自己写的。它基本上是在GDI Canvas上绘制的一些矩形。所以它不支持任何(至少现在);-) – Boris 2012-02-28 11:39:58

+0

好吧 - 我猜你有理由走这条路 - 但听起来像是在你前面做了很多努力和保持工作。 – Ricibob 2012-02-28 11:44:21