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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top