2015-07-13 44 views
0

我有Part包含TreeViewerNode s和每个Node具有name属性。我有一个文本字段来编辑当前所选节点的名称。我已绑定了当前的选择和低于这个文本字段:如何在文本字段值更改时标记脏部分?

IViewerObservableValue observedElementSingleSelection = ViewersObservables 
      .observeSingleSelection(treeViewer); 

IObservableValue detailValue = PojoProperties.value(Node.PROPERTY_NAME, String.class) 
      .observeDetail(observedElementSingleSelection); 
ISWTObservableValue observableNameText = WidgetProperties.text(SWT.Modify) 
      .observe(nameText); 
dataBindingContext.bindValue(observableNameText, detailValue); 

现在我想只要用户编辑任何Node的名字,以纪念这个treeViewer脏的部分。

当此Part打开时,将从数据库中检索Node,并创建树。如果我将ModifyListener添加到文本字段以标记零件脏,然后在初始加载Part被标记为脏,我不想。只有在用户编辑任何Node的名称时才有办法标记Part肮脏,但不是在初始加载时?

我试图设置UpdateStrategy,以便数据绑定是单向的,即仅从视图到模型,但是在选择时名称不会出现在文本字段中。

我试过KeyListener,但是我必须过滤掉所有不可打印的键,以将Part标记为脏。有没有更好的解决方案?

+0

我建议你先加载模型并设置绑定/侦听器等。之后。然后它不应该变脏。 –

回答

0

加载完成后您可以添加ModifyListener,或者在加载完成时删除修改侦听器,或者在加载过程中设置标志,修改侦听器可以测试并且不会将该部分设置为脏。

+0

我在@ @ PostConstruct方法中的流程如下: 1.创建TreeViewer并使用节点填充它。 2.创建文本字段。 3.设置数据绑定。 4.添加修改侦听器。 但是数据绑定实际上在选择节点时起作用。所以当Part打开时,默认选择根节点,并在文本字段中显示根节点的名称。这标志着该部分很脏。 顺便说一句,有没有办法将MDirtyable直接与数据绑定设置为true? –

+0

您可以在模型的observable值上使用'IChangeListener'。 –

相关问题