如何在其他对象的 属性 中访问对象的 属性?
How to access object's property in inside other object's property?
//class MessageModel
public class MessageModel
{
public string Name{get;set;}
public BindingList<AttachDocument> _attachDocument {get;set;};
}
// class AttachDocument that it's object is a MessageModel property
public class AttachDocument
{
public string AttachName { get; set; }
public bool IsCheck { get; set; }
}
MessageModel source = new MessageModel { AttachDocument = new BindingList<AttachDocument>()};
MessageModel value = new MessageModel { AttachDocument = new BindingList<AttachDocument>()};
// Error "AttachName" is not defined
source.AttachDocument.AttachName = value.AttachDocument.AttachName; // What I want to access
那么我如何在其他对象的 属性 中访问访问对象的 属性 并分配一个值。
你的class中没有属性,只有一个成员变量。这需要先包装在 get/set 中。
那么 AttachDocument 属性 是一个 AttachDocument 实例列表,而不是一个实例,所以您遇到的问题是 AttachName 不在列表中 属性 .
This is how you can use indexers to get an element by index
我假设你想要这个:
MessageModel source = new MessageModel { AttachDocument = new BindingList<AttachDocument>()};
source._attachDocument[myIndex].AttachName = "Name";
然而,这假定您已经创建了一个 AttachDocument
的实例并将其添加到您的 source
的 _attachDocument
-列表中:
MessageModel source = new MessageModel { _attachDocument = new BindingList<AttachDocument>()};
source._attachDocument.Add(myDocument);
顺便说一句 _attachDocument
是 public 属性 的坏名字。您应该绝对遵循命名约定。所以把_attachDocument
改成AttachDocument
。 属性 可以与其类型的 class 同名。但是,在您的情况下,属性 是一个文档列表,因此最好的名称是 AttachDocuments
,最后是 "s"。这清楚地表明 属性 是某种需要访问索引的集合。
没有名为 AttachDocument
的 属性。它是一个与您定义的字段无关的 class。您需要解决一些问题:
- 首先,您需要创建该字段
public
,以使其在您的 class; 之外可访问
- 其次,您需要将其设为 属性 以遵循约定,例如帮助将其绑定到 WPF 中;
- 第三,列表应按索引寻址,但只有在您向其中添加项目后才可以。
因为你想遍历列表,你需要像 foreach
:
public class MessageModel
{
public string Name{get;set;}
public BindingList<AttachDocument> AttachDocuments {get;set;}
}
foreach (AttachDocument s in source.AttachDocuments)
{
AttachDocument t = new AttachDocument();
t.AttachName = s.AttachName;
value.AttachDocuments.Add(t);
}
//class MessageModel
public class MessageModel
{
public string Name{get;set;}
public BindingList<AttachDocument> _attachDocument {get;set;};
}
// class AttachDocument that it's object is a MessageModel property
public class AttachDocument
{
public string AttachName { get; set; }
public bool IsCheck { get; set; }
}
MessageModel source = new MessageModel { AttachDocument = new BindingList<AttachDocument>()};
MessageModel value = new MessageModel { AttachDocument = new BindingList<AttachDocument>()};
// Error "AttachName" is not defined
source.AttachDocument.AttachName = value.AttachDocument.AttachName; // What I want to access
那么我如何在其他对象的 属性 中访问访问对象的 属性 并分配一个值。
你的class中没有属性,只有一个成员变量。这需要先包装在 get/set 中。
那么 AttachDocument 属性 是一个 AttachDocument 实例列表,而不是一个实例,所以您遇到的问题是 AttachName 不在列表中 属性 .
This is how you can use indexers to get an element by index
我假设你想要这个:
MessageModel source = new MessageModel { AttachDocument = new BindingList<AttachDocument>()};
source._attachDocument[myIndex].AttachName = "Name";
然而,这假定您已经创建了一个 AttachDocument
的实例并将其添加到您的 source
的 _attachDocument
-列表中:
MessageModel source = new MessageModel { _attachDocument = new BindingList<AttachDocument>()};
source._attachDocument.Add(myDocument);
顺便说一句 _attachDocument
是 public 属性 的坏名字。您应该绝对遵循命名约定。所以把_attachDocument
改成AttachDocument
。 属性 可以与其类型的 class 同名。但是,在您的情况下,属性 是一个文档列表,因此最好的名称是 AttachDocuments
,最后是 "s"。这清楚地表明 属性 是某种需要访问索引的集合。
没有名为 AttachDocument
的 属性。它是一个与您定义的字段无关的 class。您需要解决一些问题:
- 首先,您需要创建该字段
public
,以使其在您的 class; 之外可访问
- 其次,您需要将其设为 属性 以遵循约定,例如帮助将其绑定到 WPF 中;
- 第三,列表应按索引寻址,但只有在您向其中添加项目后才可以。
因为你想遍历列表,你需要像 foreach
:
public class MessageModel
{
public string Name{get;set;}
public BindingList<AttachDocument> AttachDocuments {get;set;}
}
foreach (AttachDocument s in source.AttachDocuments)
{
AttachDocument t = new AttachDocument();
t.AttachName = s.AttachName;
value.AttachDocuments.Add(t);
}