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

时间:2018-01-29 08:45:34

标签: c# object mvvm devexpress bindinglist

//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

那么如何在其他对象的属性中访问访问对象的属性并赋值。

3 个答案:

答案 0 :(得分:1)

您的类中的AttachDocument没有属性,只有成员变量。这需要首先包含在get / set中。

然后AttachDocument属性是AttachDocument实例的列表,而不是单个实例,因此您遇到的问题是AttachName不是列表中的属性

This is how you can use indexers to get an element by index

答案 1 :(得分:1)

我认为你想要这个:

MessageModel source = new MessageModel { AttachDocument = new BindingList<AttachDocument>()};
source._attachDocument[myIndex].AttachName = "Name";

但是,假设您已经创建了AttachDocument的实例,并已将其分配到_attachDocument的{​​{1}}列表中:

source

旁边MessageModel source = new MessageModel { _attachDocument = new BindingList<AttachDocument>()}; source._attachDocument.Add(myDocument); 是一个公共财产的坏名称。您应该明确遵循命名约定。因此,将_attachDocument更改为_attachDocument。属性可以与其类型的类具有相同的名称。但是在您的情况下,该属性是一个文档列表,因此最好的名称是AttachDocument,最后带有“s”。这清楚地表明该属性是某种需要访问索引的集合。

答案 2 :(得分:1)

没有名称为AttachDocument的媒体资源。它是一个与您定义的字段无关的类。您需要解决几个问题:

  • 首先,您需要创建字段public,以便在您的课程之外访问该字段;
  • 其次,您需要使其成为遵循约定的属性,并帮助将其绑定到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);
}