我正在使用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个班级
请尽快帮助我。
答案 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传递给你)。
因此,您的委托/数据源可以传递给您的列表,从中确定应该显示多少项目/子项,并正确回答问题。