将一个类绑定到另一个类';s财产

本文关键字:另一个 财产 绑定 一个 | 更新日期: 2023-09-27 18:25:57

标题听起来可能有点奇怪,所以我将尝试解释我的问题:

假设我有一个类,它包含一些信息:

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
}

现在,我需要representer类的两个对象来向用户公开我的Info类:两个Info中的每一个都有一个representer。为了实现这一点,最好将每个属性作为某种"参数"传递给我的representer类。当然,这在C#中是不可能的。另一个解决方案是传递属性的名称,然后使用反射来访问它们——这不是很好!

有什么解决办法吗?也许某种体系结构可以解决这种问题?谢谢

将一个类绑定到另一个类';s财产

一个选项是传递两个委托-一个用于setter,一个用于getter:

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

那么InfoGUIRepresenter构造函数将使用一个Func<int>和一个Action<int>。(或者,对于不同类型的属性,可以使representer通用。)

您提到"在某种GUI中"显示,这意味着您正在使用GUI框架。当然,这个框架支持一个针对这种情况的定义良好的模型。例如,MVVM,如果您正在使用WPF(您的信息对象是模型,您的UI是视图,您可以通过绑定到UI元素属性的视图-模型属性从视图绑定到模型)。你不是想在这里重新发明轮子吗?