【问题标题】:How to populate NSOutlineView in Xamarin Mac having 2 different nested Lists如何在具有 2 个不同嵌套列表的 Xamarin Mac 中填充 NSOutlineView
【发布时间】:2016-10-27 22:33:12
【问题描述】:

我正在 Xamarin for Mac 中开发一个需要 TreeView 的应用程序。我正在实施 NSOutlineView 来实现 TreeView。我想从一个列表中填充大纲视图,该列表本身包含不同类型的列表。例如 列表是 列表列表 类的定义如下

Class ClassA:NSObject
{
   public List<ClassB> listClassB { get; set; }
   public string Types { get; set; }
}

ClassB如下

public class ClassB
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int TypeName { get; set; }
        public ClassC Owner { get; set; }
        public DateTime LastActivity { get; set; }
        public Collection<ClassC> Users { get; set; }
    }

但我不知道如何在 Xamarin for Mac 的 NSOutlineView 中实现此列表。 xamarin 给出的例子只包含一个类。但我有 3 节课

请尽快帮助我。

【问题讨论】:

    标签: nsoutlineview xamarin.mac


    【解决方案1】:

    有几种方法可以解决这个问题。我使用一个通用类作为 sourcelistitem,它有一个通用项目的子列表,以便能够构建树。

    您可以让您的类从通用 sourcelistitem 继承或在通用项目类中创建属性,以使其可以包含您的不同类。

    继承方法的简化示例:

    public class SourceListItem: NSObject, IEnumerator, IEnumerable
    {
        private List<SourceListItem> _items = new List<SourceListItem> ();
    }
    
    Class ClassA: SourceListItem
    {
    
       public string Types { get; set; }
    }
    
    Class ClassB: SourceListItem
    {
    
      public int Id { get; set; }
      public string Name { get; set; }
      public int TypeName { get; set; }
      public DateTime LastActivity { get; set; }
    
    }
    

    【讨论】:

    • 感谢 SVN 的解决方案
    【解决方案2】:

    从根本上说,Cocoa 并不关心你的内部数据结构,它只关心两件事:

    • 树的结构。您通过回答 GetChildrenCount / GetChild / ItemExpandable 的 NSOutlineViewDataSource 派生类提供此信息

    • 查看每棵树。你通过你的 NSOutlineViewDelegate 派生类提供这个,通过 GetView 返回一个(你在 GetChild 中返回的 NSObject 传递给你)。

    因此,您的委托/数据源可以传递对您的列表的引用,从中确定应该显示多少项目/子项,并正确回答问题。

    您可以在此处查看详细示例:https://github.com/xamarin/mac-samples/blob/master/NSOutlineViewAndTableView/NSOutlineViewAndTableViewExample/NSOutlineViewCode/NSOutlineViewExample.cs#L47

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多