23 junio 2008

WPF - Problemas con RadioButton

Hace algo más de un mes empezamos a dar nuestros primeros pasos con WPF, hoy nos hemos encontrado un problema del cual hemos encontrado poca información y al cual nadie sabe dar una solución.
El problema nos surge cuando tenemos una propiedad booleana en nuestra entidad de negocio y queremos representar sus dos posibles valores mediante dos RadioButton, uno de ellos lo enlazaremos mediante Binding con la propiedad de negocio, hasta aquí nada distinto de lo que haríamos en WinForms. Cuando mostremos la ventana encontraremos marcados correctamente los RadioButton pero si jugamos con ellos, marcandolos y desmarcandolos, podemos observar como la propiedad de negocio no se actualiza.
En el siguiente post del foro de MSDN podemos leer algunos casos en los que ocurre lo mismo sin que nadie sepa dar una solución, en la última entrada de dicho post nos dirigen a otro hilo en el cual se comenta que este comportamiento es un problema conocido y aún sin solución. Dicho comportamiento es debido a que cuando pulsamos alguno de los RadioButton que componen el grupo, se llama al método ClearValue(IsClicked) lo que hace que se eliminen los binding que tengan dichos RadioButton.

(Edito) Por el momento dejamos a un lado los RadioButton y usaremos un CheckBox a falta de una solución mejor.

Tenia pendiente desde hace un tiempo publicar la solución de dimos a este caso mediante el uso de ContentControl. Si dibujamos los RadioButton dentro de un ContentControl conseguimos que se mantenga el binding que hemos establecido, únicamente encontramos una pega y es debido al orden en el que debemos declarar los RadioButton. Debemos declarar en primer lugar el RadioButton que no enlazaremos y en segundo lugar al que establecemos el binding, si lo hiciesemos al contrario al estar el binding ya creado y establecer a True la propiedad IsChecked del otro RadioButton se actualizará la propiedad en Negocio provocando comportamientos indeseados.