如何将对象的属性绑定到另一个对象的属性? (C#)
问题描述:
我正在制作一个图形控制类Info
它应该在屏幕上显示一些文本。文本是一些对象的字符串。我希望能够从Info
类的实例中获取该对象的最新值。如何将对象的属性绑定到另一个对象的属性? (C#)
class Info
{
public string Text;
}
void Program()
{
ClassA obj = new ClassA();
obj.name = "Instance of ClassA";
Info wind1 = new Info();
wind1.Text = obj.name; // this just copies current value, but should be a reference or something
/* obj.name value changes several times before it's time to display it again */
// Info window drawing method
foreach (var item in Windows) // Windows is List<Info>
Draw(item.Text); // this doesn't get the latest value
}
我该如何更改代码才能从绘图部分获取最新的字符串值?
答
更新:如果您需要某种适用于任何类型的东西,则必须使用代表。例如:
class Info
{
private Func<string> getText;
public Info(Func<string> getText)
{
getText = getText;
}
public string Text
{
get
{
return getText();
}
}
}
void Program
{
ClassA obj = new ClassA();
obj.name = "Instance of ClassA";
Info wind1 = new Info(() => obj.name);
// Now do your stuff.
}
在这种情况下,Info
被赋予一个匿名功能返回字符串。当您访问其Text
属性时,将评估函数以检索该字符串。如何检索字符串以及它来自哪里,取决于客户端代码(即Program
方法)。这样,Info
不依赖于任何特定的类型。
你可以通过ClassA
对象插入到Info
实例,以便它可以自己得到的.name
值。
可能是这样的吗?
class Info
{
public Info(ClassA obj)
{
TheObject = obj;
}
public ClassA TheObject
{
get;
set;
}
public string Text
{
get
{
return TheObject.name;
}
}
}
void Program
{
ClassA obj = new ClassA();
obj.name = "Instance of ClassA";
Info wind1 = new Info(obj);
// Now do your stuff.
}
+0
除非ClassA的字符串不一定。我正在寻找更具普遍性的东西。 – user1306322
+0
太棒了!这正是我一直在寻找的! – user1306322
我敢肯定,标题并没有尽可能多地理解它。如果你知道更好的措辞,随意编辑。 – user1306322