ZKoss与listbox的selectedItem问题

时间:2015-03-06 10:21:39

标签: mvvm listbox zk

这是我的代码:

    <listbox id="boxFirma" multiple="true"
        visible="@load(vm.opzioneSelezionata eq 'firma' ? 'true' : 'false')"
        checkmark="true" width="400px" height="200px"
        model="@bind(vm.opzioniFirma)" 
        selectedItems="@bind(vm.pickedItemSet)">
        <template name="model" var="item"
            status="s">
            <listitem selected="@bind(item.preSelected)">
                <listcell label="@bind(item.valore)" />
            </listitem>

        </template>
    </listbox> <button label="Salva" style="margin-top:10px" disabled="@load(empty vm.pickedUser)"
onClick="@command('salvaPersonalizzazioneUtente')" />

问题是,当我按下Salva按钮时,我只使用用户刚刚选择的项目vm.pickedItemSet,但没有关于预选项目 - &gt; 'listitem selected="@bind(item.preSelected)" '。因此,如果预先选择了2个项目,并且用户在视图模型上单击了一个项目,那么我只需点击一个项目,而我想要全部三项。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为您的问题是使用域对象的“预选”属性。如果没有您的View模型,很难理解您要实现的目标。

Hovewer,让我试着解答你:

例如,尝试使用此View Model(“SignOption”是一个具有单个成员值的bean)。 “Salva”按钮将打印出一组选定的列表项。

 // a bunch of imports

public class MultiSelectionVM {

    private String  opzioneSelezionata = "firma";
    private Set<SignOption> opzioniFirma = new HashSet<SignOption>();
    private Set<SignOption> pickedItemSet = new HashSet<SignOption>();
    private boolean pickedUser = true;

    @Init
    public void init(){
        SignOption opt1 = new SignOption();
        opt1.setValore("opt1");
        SignOption opt2 = new SignOption();
        opt2.setValore("opt2");
        SignOption opt3 = new SignOption();
        opt3.setValore("opt3");

        //Init list model
        opzioniFirma.add(opt1);
        opzioniFirma.add(opt2);
        opzioniFirma.add(opt3);

        //Init selected Items 
        pickedItemSet.add(opt2);

    }

    @Command
    public void salvaPersonalizzazioneUtente(){
        System.out.println(pickedItemSet);
    }


    //Getters and setter for all members
}

希望这有帮助!