【问题标题】:How to access object's property in inside other object's property? [closed]如何在其他对象的属性中访问对象的属性? [关闭]
【发布时间】:2018-07-07 22:02:34
【问题描述】:
//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

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

【问题讨论】:

  • 请编辑您的问题,因为它没有任何意义,请举例说明并更具体
  • 你所说的 property in inside property 是什么意思?显示您的预期输出
  • 您的BindingList&lt;AttachDocument&gt; 不是财产。添加get; set; 使其成为属性。还将private 更改为public
  • 我已经更新了我的问题

标签: c# object mvvm devexpress bindinglist


【解决方案1】:

我假设你想要这个:

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 是公共财产的坏名声。您绝对应该遵循命名约定。所以将_attachDocument 更改为AttachDocument。属性可以与其类型的类同名。但是,在您的情况下,该属性是一个文档列表,因此最好的名称是AttachDocuments,末尾带有“s”。这清楚地表明该属性是某种需要访问索引的集合。

【讨论】:

    【解决方案2】:

    没有名称为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);
    }
    

    【讨论】:

    • 如果我们使用循环它工作,但如何访问没有循环?
    • source.AttachDocuments[0],第一个,如果有添加的话。
    • @BenniTo 您需要更多帮助吗?
    • 谢谢,它正在使用循环,我可以接受。
    【解决方案3】:

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

    那么 AttachDocument 属性是 AttachDocument 实例的列表,而不是单个实例,所以您遇到的问题是 AttachName 不是列表中的属性

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

    【讨论】:

    • 没有AttachDocument 属性。不过有一个同名的类。
    • 首先需要将其包装在 get/set 中。 不,它不需要是可访问的属性。让它public 会有所帮助。
    • 是的,我忘记提了,但是上面的 cmets 中已经提到了...我已经修改了答案以包含该问题!
    • 我已经更新了我的问题
    • 通常,链接不是答案。
    猜你喜欢
    • 2020-11-20
    • 2022-01-23
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多