0

我有一些分层数据模型,我想在 NSOutlineView 中呈现。我将树控制器绑定到大纲视图以提供数据并处理选择和绑定到其他视图。

但是,我只想将模型中的部分数据显示到大纲视图中。(我的层次结构中的每个对象都有一个子对象数组,但我只希望这些子对象中的一些显示为树中节点的子节点。)我希望我可以将过滤谓词附加到树控制器,但似乎 NSOutlineView 不支持过滤谓词。

认为这种设计需要一个 NSOutlineViewDataSource 来过滤我的数据模型,以及一个绑定到数据源和大纲视图的 NSTreeController。但是,树控制器中的绑定出口(内容数组、内容对象、内容集等)似乎都不适合绑定数据源。

有任何想法吗?提前致谢...

4

2 回答 2

0

您可以尝试通过数组控制器将数据提供给您的子对象数组。

这就是我的做法。覆盖您表示的对象中的访问器方法,并从您的数组控制器返回一个过滤后的数组。

于 2012-09-05T03:53:47.783 回答
0

通常,NS[Outline|Table]ViewDataSource 和 Cocoa Bindings 是“非此即彼”的选择。混合这些方法虽然可能并非绝对不可能,但可能会导致不可预测的结果。

您提到将过滤谓词绑定到大纲视图本身而不是特定节点,所以我推测所有节点的一个过滤谓词可能“足够好”。如果是这种情况,那么一种解决方案是在您的模型上公开第二个儿童贩卖属性,也许filteredChildren,并告诉 NSOutlineView 使用它来访问子项,而不是您的默认/完整儿童贩卖属性。如果您需要诸如拖动重新排序之类的功能,这种方法可能被证明是不平凡的,但无论如何探索这种方法应该很容易。

如果您需要为每个节点使用不同的过滤器,或者如果过滤器动态更改,则此任务可能已经成为实现 NSOutlineViewDataSource 的良好候选者(并且使用 Cocoa 绑定的较差候选者)。

于 2012-12-05T12:33:09.117 回答