如何在具有2个不同嵌套列表的Xamarin Mac中填充NSOutlineView

时间:2016-10-20 12:24:30

标签: nsoutlineview xamarin.mac

我正在使用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个班级

请尽快帮助我。

2 个答案:

答案 0 :(得分:0)

有几种方法可以解决这个问题。我使用一个通用类作为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; }

}

答案 1 :(得分:0)

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

  • 树的结构。您可以通过NSOutlineViewDataSource派生类来解答GetChildrenCount / GetChild / ItemExpandable

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

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

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