C# Xcode NSOutlineView怪异行为

C# Xcode NSOutlineView怪异行为,c#,xcode,cocoa,xamarin,nsoutlineview,C#,Xcode,Cocoa,Xamarin,Nsoutlineview,当我从NSOutlineView扩展一个项目时,一切都在按预期进行。但是当所有的都被扩展,第一个将被取消扩展时,就会发生一件奇怪的事情 我实际上所做的只是实现数据源和委托 public class FolderOutlineDataSource : NSOutlineViewDataSource { #region Public Variables public List<Folder> Folders = new List<Folder>();

当我从NSOutlineView扩展一个项目时,一切都在按预期进行。但是当所有的都被扩展,第一个将被取消扩展时,就会发生一件奇怪的事情

我实际上所做的只是实现数据源和委托

public class FolderOutlineDataSource : NSOutlineViewDataSource
{
    #region Public Variables
    public List<Folder> Folders = new List<Folder>();
    #endregion

    public FolderOutlineDataSource()
    {
    }

    public override nint GetChildrenCount(NSOutlineView outlineView, NSObject item)
    {
        if (item == null)
        {
            return Folders.Count;
        }
        else
        {
            return ((Folder)item).Folders.Count;
        }

    }

    public override NSObject GetChild(NSOutlineView outlineView, nint childIndex, NSObject item)
    {
        if (item == null)
        {
            return Folders[(int)childIndex];
        }
        else
        {
            return ((Folder)item).Folders[(int)childIndex];
        }

    }

    public override bool ItemExpandable(NSOutlineView outlineView, NSObject item)
    {
        if (item == null)
        {
            return Folders[0].IsProductGroup;
        }
        else
        {
            return ((Folder)item).IsProductGroup;
        }

    }
}

public class FolderOutlineDelegate : NSOutlineViewDelegate
{

    #region Constants 
    private const string CellIdentifier = "FolderCell";
    #endregion

    #region Private Variables
    private FolderOutlineDataSource DataSource;
    #endregion

    public FolderOutlineDelegate(FolderOutlineDataSource datasource)
    {
        this.DataSource = datasource;
    }

    #region Override Methods
    public override NSView GetView(NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item)
    {
        // This pattern allows you reuse existing views when they are no-longer in use.
        // If the returned view is null, you instance up a new view
        // If a non-null view is returned, you modify it enough to reflect the new data
        NSTextField view = (NSTextField)outlineView.MakeView(CellIdentifier, this);
        if (view == null)
        {
            view = new NSTextField();
            view.Identifier = CellIdentifier;
            view.BackgroundColor = NSColor.Clear;
            view.Bordered = false;
            view.Selectable = false;
            view.Editable = false;
        }

        // Cast item
        var folder = item as Folder;

        view.StringValue = folder.FolderName;

        /*
        // Setup view based on the column selected
        switch (tableColumn.Title)
        {
            case "Product":
                view.StringValue = product.Title;
                break;
            case "Details":
                view.StringValue = product.Description;
                break;
        }
        */

        return view;
    }
    #endregion
}
我直接从计算机上得到这个代码。 有人也有这个吗?或者我错过了什么

谢谢你的帮助

public override void AwakeFromNib()
    {
        base.AwakeFromNib();

        // Create data source and populate
        var DataSource = new FolderOutlineDataSource();

        var Vegetables = new Folder("Vegetables");
        Vegetables.Folders.Add(new Folder("Cabbage"));
        Vegetables.Folders.Add(new Folder("Turnip"));
        Vegetables.Folders.Add(new Folder("Radish"));
        Vegetables.Folders.Add(new Folder("Carrot"));
        DataSource.Folders.Add(Vegetables);

        var Fruits = new Folder("Fruits");
        Fruits.Folders.Add(new Folder("Grape"));
        Fruits.Folders.Add(new Folder("Cucumber"));
        Fruits.Folders.Add(new Folder("Orange"));
        Fruits.Folders.Add(new Folder("Blackberry"));
        DataSource.Folders.Add(Fruits);

        var Meats = new Folder("Meats");
        Meats.Folders.Add(new Folder("Beef"));
        Meats.Folders.Add(new Folder("Pork"));
        Meats.Folders.Add(new Folder("Veal"));
        DataSource.Folders.Add(Meats);

        // Populate the outline
        ovFiles.DataSource = DataSource;
        ovFiles.Delegate = new FolderOutlineDelegate(DataSource);
    }