在C#中将(复杂)类属性绑定到CF.NET

时间:2010-08-22 11:15:51

标签: c# binding properties compact-framework

我正在尝试对类属性进行双向绑定。

public class MyClass{
public MyField AField1{get;set;};
public MyField AField2{get;set;};
}

public class MyField{
public string Value {get; set}
}

MyClass _class = MyClass();
_dv.DataSource = _class;

数据绑定文本对象显示 MyField 类名而不是 Value 属性。我也尝试进入:

DataMember = "AField1.Value";

有没有办法将类 MyClass 的AField1.Value绑定(双向)到可视控件?

1 个答案:

答案 0 :(得分:0)

这是一种痛苦。在.NET中没有内置的方法来实现这一点,所以我可以肯定地说,在CF中更少。

您可以在MSDN博客上开始使用此article,但它非常有限,因为您只能获得一级嵌套属性绑定。

个人而言,我最终编写了一个自定义BindingSource,基于位于互联网上某处的代码。我不能给你重写的源代码,因为它是我雇主的财产,但这是让我开始的项目的link

提供的代码有一些缺点:他的一些命名空间是System.ComponentModel,VS2010似乎不喜欢,所以我不得不重命名它们。还有一些设计时间上的问题可能会让你感到痛苦(所以你也想要解决这个问题),比如在你拼写错误时丢失属性列表等等......

但它是创建一个处理嵌套对象的良好BindingSource的最佳镜头(恕我直言),您将了解需要采取哪些措施来实现嵌套绑定。

最后一个缺点(也许是最大的缺点,但我没有使用CF的经验)是该项目是为常规.NET Framework编写的,因此您可能必须完全重写它。

希望有所帮助....

编辑。哦,哦,我一直在挖掘而没有注意到......抱歉。

PS。另一个想法是简单地为每个嵌套对象创建一个绑定源,但如果对象层次结构很复杂,它会变得混乱(IMO)。