Domanda

Ho un datagrid dinamico in cui una delle colonne è una casella di controllo. Ho creato una classe "Transazioni" in cui lega le colonne del datagrid a diverse proprietà in quella classe. Voglio che la mia casella di controllo sia associata a una proprietà che è un numero intero. È un numero intero perché sto popolando le proprietà da una query al mio database. I possibili numeri interi sono 1 (vero) o 0 (falso). Ecco cosa ho finora per creare il mio database:

    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;
    }

Sul mio vero datagrid, la casella di controllo viene visualizzata ma sono sempre incontrollate, anche se la proprietà mostra un 1. Anche quando faccio la convalida della mia riga, il valore che si presenta per la colonna è corretto, contiene un 1 o uno 0 in Il parametro della riga. È solo che la casella di controllo non viene controllata nell'interfaccia utente per qualche motivo. Qualcuno può aiutarmi con questo?

È stato utile?

Soluzione

Puoi usare Converters Per convertire il valore della proprietà 0 e 1 in falso e vero. Probabilmente la proprietà ischecked non comprende il valore 0 e 1. Crea una classe che implementa IValueConverter e applicare quel convertitore per convertire int in bool.

Un'altra opzione potrebbe essere quella di creare una proprietà per questo nella tua classe

public bool IsChecked
{
   get
   {
       if(IntProperty == 0)
          return false;
       return true;
   }
   set
   {
       if(value)
          IntProperty = 1;
       else 
          IntProperty = 0;
   }
}

ora invece di vincolare con la proprietà INT si lega con la proprietà sopra

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top