Deshabilitar items de una lista en Windows

Alguna vez puede surgir la necesidad de que, dada una lista cuyos items son seleccionables, sea necesario deshabilitar algunos para que el usuario no pueda seleccionarlos.

Vamos a partir de una ViewModel que contiene una Lista de elementos de tipo “Movie”, cuyos atributos son Título y un bool Alquilado. Si la película esta alquilada  no debe poder seleccionarse, en caso contrario debe estar habilitado.

Para empezar vamos a crear 2 DataTemplates: una para los elementos habilitados y otra para los elementos deshabilitados:

 

Ahora vamos a sobreescribir el método:

 protected override DataTemplate SelectTemplateCore(object item,DependencyObject container)

de la clase

DataTemplateSelector” (para más información  MSDN)

donde implementaremos la lógica que decidirá si el elemento de la lista es o no seleccionable:

 

A continuación debemos declarar nuestro “Selector de Plantilla”:

 

Finalmente asignamos al atributo “ItemTemplateSelector” nuestro recurso:

 

Unos últimos trucos:

Al deshabilitar un item por defecto se vuelve traslucido, para modificar esta propiedad habrá que modificar el estilo del “ItemContainer”; lo podemos hacer desde Blend de una forma muy sencilla:

disabledOpacity03

 

Y, finalmente, cambiar el color del check cuando seleccionamos un elemento:

disabledOpacity04

 

 

En el siguiente link os podeis descargar el ejemplo: DisabledItemsInAlistApp

Leave a Reply

Your email address will not be published. Required fields are marked *