louis.luo
louis.luo

Reputation: 2971

Disable selection and itemInvoke event for a particular item in the listview

I have a listview. By default, all items have itemInvoke and single-selection enabled. But now, I would like to disable selection and itemInvoke (both event and animation) for one particular item with id "disableMe". Is there a way to do it? Or is it possible to disable the event for the whole group (not the whole listview).?

Upvotes: 3

Views: 1665

Answers (1)

louis.luo
louis.luo

Reputation: 2971

Answering my own question because I happened to figure it out today. Please advice if you have better solution for this issue.

In Metro Style Application, selection in ListView control can usually be triggered by Right-Click with mouse or by a small 'drag'/'swipe' with touch. To disable touch selection, you need to overwrite the MSPointerDown event handler for that particular item. To disable 'Right-Click' selection, you need to overwrite the oncontextmenu event for that particular item.

If you are creating itemTemplate in Javascript:

function listViewItemTemplate(item) {
    // data has boolean properties called 'doNotSelectMe' and 'doNotInvokeMe'
    var data = item.data._value;

    var itemElement = document.createElement('div');
    var itemElement.id = 'testElement';

    if (data.doNotSelectMe) {
        // disable mouse selection
        itemElement.oncontextmenu = function (e) { e.stopPropagation(); };
        // disable touch selection
        itemElement.addEventListener('MSPointerDown', function (e) {
                                          e.stopPropagation();
                                     });
    }

    if (data.doNotInvokeMe) {
        //disable item invoke event
        itemElement.onclick = function (e) { e.stopPropagation(); };
    }

    return {element: itemElement}

}

Upvotes: 4

Related Questions