2015-07-13 65 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'。 –

相關問題