如何在其他对象的 属性 中访问对象的 属性?

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);
}