【问题标题】:E4 Databinding for SWT ListSWT 列表的 E4 数据绑定
【发布时间】:2015-02-25 11:55:55
【问题描述】:

我尝试通过数据绑定将 SWT List 的项目绑定到 List 属性。

我的模型课:

public class Config extends ModelObject {
    private List<String> tagList;

    public List<String> getTagList() {
        return tagList;
    }

    public void setTagList(List<String> tagList) {
        firePropertyChange("tagList", this.tagList, this.tagList = tagList);
    }
}

我的绑定:

...
private List tagList;
...
private void addDataBinding() {
    Config config = ConfigHandler.getInstance().getConfig();

    DataBindingContext ctx = new DataBindingContext();

    IObservableList observableModelTagList = BeanProperties.list(Config.class, "tagList").observe(config);
    IObservableList observableWidgetTagList = WidgetProperties.items().observe(tagList);


    ctx.bindList(observableWidgetTagList, observableModelTagList);
}

由于没有成功,我尝试使用Converters
它也不起作用,但至少我可以看到,如果我在tagList 小部件上使用tagList.add(x)tagList.setItems(x),则不会触发任何事情(甚至没有调用转换方法)。
所以我猜WidgetProperties.items() 并没有像我预期的那样工作。
我希望每次与项目有关的任何更改都会触发更改,因此在添加、删除和新设置时。
如何将 SWT 列表绑定到模型中的列表属性?

【问题讨论】:

    标签: java data-binding eclipse-rcp


    【解决方案1】:

    您可以使用ListViewer 而不仅仅是List

    ListViewer viewer = new ListViewer(tagList);
    
    IValueProperty displayValue = ... property to display in the list
    
    ViewerSupport.bind(viewer, observableModelTagList, displayValue);
    

    如果没有“displayValue”,您可以使用:

    ListViewer viewer = new ListViewer(tagList);
    
    ObservableListContentProvider contentProvider = new ObservableListContentProvider();
    viewer.setContentProvider(contentProvider);
    
    viewer.setLabelProvider(new LabelProvider());
    
    viewer.setInput(observableModelTagList);
    

    【讨论】:

    • 感谢您的回复!您能再向我解释一下 IValueProperty 字段吗?
    • 或更准确地说:当我使用 List 时,我不必使用 BeanProperties.value(String.class, "value");作为 IValueProperty?这行不通。
    • 添加了当您没有显示值时的替代方案
    • 谢谢!那种作品,但仅适用于初始绑定。如果我启动应用程序,模型中的值将被 ListViewer 采用,但如果我之后更改模型或列表查看器,则相应的其他值不会改变。
    • 对不起,我能做到的就这么多。我放弃了列表的数据绑定,因为它不适用于我想要使用的 CSS 样式。
    猜你喜欢
    • 2011-09-02
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多