DataGridtemplateColumn con casilla de verificación
-
28-10-2019 - |
Pregunta
Tengo una datagrida dinámica en la que una de las columnas es una casilla de verificación. Creé una clase de "Transacciones" en la que encuentro las columnas de DataGrid a diferentes propiedades en esa clase. Quiero que mi casilla de verificación esté vinculada a una propiedad que es un entero. Es un entero porque estoy llenando las propiedades de una consulta en mi base de datos. Los posibles enteros son 1 (verdadero) o 0 (falso). Esto es lo que tengo hasta ahora para crear mi base de datos:
private DataGridTemplateColumn GetVoidColumn()
{
DataGridTemplateColumn voidColumn = new DataGridTemplateColumn();
voidColumn.Header = "Void";
Binding bind = new Binding("Visible");
bind.Mode = BindingMode.TwoWay;
// Create the CheckBox
FrameworkElementFactory voidFactory = new FrameworkElementFactory(typeof(CheckBox));
voidFactory.SetValue(CheckBox.IsCheckedProperty, bind);
DataTemplate voidTemplate = new DataTemplate();
voidTemplate.VisualTree = voidFactory;
voidColumn.CellTemplate = voidTemplate;
return voidColumn;
}
En mi Real DataGrid, la casilla de verificación aparece, pero siempre están sin marcar, incluso si la propiedad muestra un 1. Incluso cuando hago mi validación de fila, el valor que aparece para la columna es correcto, contiene un 1 o un 0 en El itemarray de la fila. Es solo que la casilla de verificación no se está marcando en la interfaz de usuario por alguna razón. ¿Alguien me puede ayudar con esto?
Solución
Puedes usar Converters
para convertir el valor de la propiedad 0 y 1 a falso y verdadero. Probablemente la propiedad de IssCecked no comprende el valor 0 y 1. Cree una clase que implementa IValueConverter
y aplique ese convertidor para convertir int en bool.
Otra opción podría ser crear una propiedad para esto en su clase.
public bool IsChecked
{
get
{
if(IntProperty == 0)
return false;
return true;
}
set
{
if(value)
IntProperty = 1;
else
IntProperty = 0;
}
}
Ahora, en lugar de vincular con el enlace de propiedad int con la propiedad anterior