是否可以将NSTreeController绑定到NSOutlineViewDataSource?

时间:2012-09-01 14:21:50

标签: cocoa cocoa-bindings nsoutlineview nstreecontroller

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

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

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

有什么想法吗?提前谢谢......

2 个答案:

答案 0 :(得分:0)

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

我是这样做的。覆盖表示对象中的访问器方法,并从阵列控制器返回已过滤的数组。

答案 1 :(得分:0)

通常,NS [Outline | Table] ViewDataSource和Cocoa Bindings是“或者/或”选择。混合这些方法,虽然可能不是严格不可能,但可能会导致不可预测的结果。

您提到将过滤谓词绑定到Outline视图本身而不是特定节点,因此我猜测所有节点的一个过滤谓词可能“足够好”。如果是这种情况,那么解决这个问题的方法就是在您的模型上公开第二个儿童自动售货机,可能是filteredChildren,并告诉NSOutlineView使用它来访问儿童而不是您的默认/完整儿童 - 自动售货机。如果您需要拖动重新排序等功能,这种方法可能会非常重要,但无论如何都应该很容易探索这种方法。

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