C# Xcode NSOutlineView怪异行为
当我从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>();
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);
}