2009-05-28 102 views
0

比方说,我有一个具有高度和宽度属性的大小类(实际上类比这更复杂一点,但大小是一个很好的例子)。什么是最好的方式来添加一个复合材料绑定到一个现有的类

我想在我的UI中显示为$ width x $ height。

这样做的一个显而易见的方法是绑定到一个尺寸属性,该属性取决于宽度和高度。

我的问题是哪里是最好的地方添加这个新的属性?

我可以将它添加到模块中的Size类本身,但如果另一个控制器想要显示不同的字符串,我会卡住创建另一个属性。我也有点不情愿这样做,因为在我的情况下,Size类是在一个框架中,将在两个不同的地方使用(尽管可能全部来自我控制的代码)。

我可以将它添加到包含视图/控制器的项目中的Size类的类中,因此它只会在我知道它将被使用的地方可用,但在各个地方我已经看到了类的建议往往被过度使用,并被迫想知道这是否是这种情况之一。

在单个Size实例的情况下,我可以在包含它的控制器类中创建属性,但是当您有一个尺寸数组时,这会变得更加困难。

我可以绑定到整个大小的对象,并使用一个转换器将它们转换为字符串,但绑定到一个数组的大小会导致你必须将数组的每个元素转换成一个新的数组在变换器中,这看起来有点难看。

回答

4

如果要将此复合值显示为字符串,则将文本字段的“显示样式1”绑定到width属性,将“显示样式2”(在绑定显示样式1时显示)绑定到height属性。在显示模式1绑定中,将“显示模式”设置为%{value1}@ x %{value2}@(是的,稍微不直观的语法)。这将显示一个显示“[宽度] x [高度]”的文本字段,并将更新任一属性中的更改。

您可以使用NSTextFieldCell(例如,作为NSTableColumn中的单元格。此方法的缺点是文本字段将无法编辑绑定的widthheight值。如果你需要编辑它们,你将不得不编写一个NSValueTransformer。

+0

我其实并不需要这些字段是可编辑的,所以这将是理想的。谢谢! – 2009-05-28 20:51:35

0

我想在我的用户界面中显示为$ width x $ height。

为什么不是两个字段?然后你可以让它们可编辑。

(现实中的班级比这更复杂一点,但大小也是一个不错的例子)

上面的假设是不是在你的真实情况是可行的,你可以尝试创建一个自定义子类的NSFormatter,并将其设置为单元格上的格式化程序(我认为这是在表视图中,因为您不会将单个控件绑定到数组)。然后,您将绑定到整个Size对象。

1

通过显示模式使用多个绑定,因为Barry建议听起来像是最好的方法,至少不知道更多关于您的UI。过去我使用过相同的东西,我为一系列图像构建了一个检查器,并将尺寸绑定到单个文本字段。

一般来说,如果可以的话,使用值转换器或格式化程序是一种很好的做法,但在最后的手段中,使用类别没有任何问题。我过去做过这件事的时候,我遇到了绑定日期的麻烦,但把它分解成单独的时间和日期片段。类别是一种很好的方法,因为它可以让您与模型保持分离,但您不需要像直接绑定到控制器那样做任何疯狂的事情。

+0

感谢您的洞察力。 – 2009-05-28 20:51:47

相关问题