簡體   English   中英

如何將索引屬性綁定到Jface Viewer

[英]How do bind indexed property to jface viewer

我想將索引屬性綁定到JFace ComboViewer。

可以說我有一個像這樣的DataModel類:

class DataModel {
   private String[] props = {"A","B","C"};
   private PropertyChangeSupport pcs = new PropertyChangeSupport(this);

   public String getProperties( int idx ){
      return props[idx];
   }

   public void setProperties( int idx, String value ){
      String oldVal = props[idx];
      props[idx] = value;
      pcs.fireIndexedPropertyChange( "properties", idx, oldVal, value );
   }

   // code to add/remove PropertyChangeListener
   // ...
}

簡單屬性的數據綁定代碼如下所示:

DataModel dataModel = ...
ComboViewer propertyChoice = ...

DataBindingContext ctx = new DataBindingContext();

IObservableValue target = ViewerProperties.singleSelection().observe( propertyChoice );
IObservableValue model = BeanProperties.value( DataModel.class, "properties" ).observe(dataModel);
ctx.bindValue( target, model ); 

但是使用索引屬性時,我必須通知ctx,該索引是我要綁定的值。 我努力了

IObservableValue model = BeanProperties.value( DataModel.class, "properties[0]" ).observe(dataModel);

但這不起作用。

是否可以綁定索引屬性而不是簡單屬性? 怎么樣?

不幸的是,這似乎不受支持。 我一直在尋找完全相同的功能。 BeanProperties中沒有任何文檔說明該文檔受支持。

在研究BeanProperties.value的實現時,您發現它委托給BeanPropertyHelper來讀寫屬性。 方法Object readProperty(Object source, PropertyDescriptor propertyDescriptor)不了解子類IndexedPropertyDescriptor。 為索引屬性調用它時,readProperty嘗試使用讀取整個數組的read方法。 我認為此方法對於索引屬性是可選的。 對於索引屬性,應使用IndexedPropertyDescriptor.getIndexedReadMethod()。

根據您的用例,您可以使用BeanProperties.list解決該問題。 但是,不能將其與索引屬性一起使用。 我嘗試通過添加一個返回整個數組的方法但仍保留執行“ fireIndexedPropertyChange”的方法來嘗試此操作。 不幸的是,這給出了ClassCastException:Eclipse的BeanListProperty似乎假設change事件中的值是數組或列表。 但是,對於索引屬性,它是數組的單個元素。

也許您可以改用可觀察的地圖?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM