如何从级联中取消选择ListView中的项目?

时间:2014-10-21 14:29:19

标签: blackberry qml blackberry-10 cascade blackberry-cascades

我正在使用Momentics IDE(原生SDK)开发BlackBerry 10移动应用程序。

我有一个简单的ListView,我想根据选择状态更改特定项目的背景。我认为下面的代码可行,但它没有,任何人都可以帮助这个吗?

ListView{
        id: simpleList

        dataModel: groupDataModel

        listItemComponents: [
            ListItemComponent {
                type: "item"

                SQLvListItem {
                    id: containerItem

                    itemLabel: ListItemData.label

                    // Item Label Style
                    itemFontSize: ListItemData.fontSize
                    itemFontName: ListItemData.fontName
                    itemFontStyle: ListItemData.fontStyle
                    itemFontColor: containerItem.ListItem.selected ? ListItemData.fontColorSelected : ListItemData.fontColor

                    //Item background
                    containerBorderColor: ListItemData.borderColor
                    containerBackgroundColor: containerItem.ListItem.selected ? ListItemData.backgroundColorSelected : ListItemData.backgroundColor
                }
            }
        ]

        onTriggered: {
            var selectedItem = dataModel.data(indexPath);

            if (selected() == indexPath){
                select(indexPath, false);
                dataModel.itemUpdated(indexPath)
            }       
            else{
                select(indexPath, true);
            }
        }
    }

PS:" SQLvListItem"是我创建的自定义项目

2 个答案:

答案 0 :(得分:1)

在您的SQLvListItem中,添加一个属性为“IsSelected”的bool,并使用containerUnselectedBackgroundColor和itemSelectedFontColor以及itemUnselectedFontColor添加containerSelectedBackgroundColor。

然后你可以这样做一个函数:

function selectedBackground(selectedItem){
    if(selectedItem.isSelected){
        selectedItem.itemFontColor: selectedItem.itemSelectedFontColor;
        selectedItem.containerBackgroundColor: selectedItem.itemSelectedFontColor;
    }
    else{
        selectedItem.itemFontColor: selectedItem.itemUnselectedFontColor;
        selectedItem.containerBackgroundColor: selectedItem.itemUnselectedFontColor;
    }
}

这样你就有了变量来存储selectedColor和unselectedColor的字体和背景,然后你可以动态地交换它们。当它被选中时,只需在选中时将isSelected标记为true,否则选择false。

我只有你的代码片段,所以我不确定这是否可行,但值得一试!

答案 1 :(得分:0)

实际上它很简单,您只需要使用 toggleSelection()功能切换项目选项; 如果选中该项目,则取消选择该项目该项目被取消选中,它将被选中。

    ListView{
            id: simpleList

            dataModel: groupDataModel

            listItemComponents: [
                ListItemComponent {
                    type: "item"

                    SQLvListItem {
                        id: containerItem

                        itemLabel: ListItemData.label

                        // Item Label Style
                        itemFontSize: ListItemData.fontSize
                        itemFontName: ListItemData.fontName
                        itemFontStyle: ListItemData.fontStyle
                        itemFontColor: containerItem.ListItem.selected ? ListItemData.fontColorSelected : ListItemData.fontColor

                        //Item background
                        containerBorderColor: ListItemData.borderColor
                        containerBackgroundColor: containerItem.ListItem.selected ? ListItemData.backgroundColorSelected : ListItemData.backgroundColor
                    }
                }
            ]

            onTriggered: {
                var selectedItem = dataModel.data(indexPath);    
                toggleSelection(indexPath) // (solution 1)

                // Or you can use also 
                select(indexPath, (!isSelected(indexPath))) // (solution 2)
            }
        }