2013-06-18 18 views
6

Mi piacerebbe avere la colonna di controllo nella mia datagrid abilitata/disabilitata per ogni riga a seconda di un valore in una raccolta. Ho una ObservableCollection chiamata AccountComponents che è una raccolta di una classe chiamata AccountComponent che ha una proprietà booleana chiamata Abilitato. Ho provato a legare la proprietà Enabled a IsReadOnly e IsEnabled senza fortuna.DataGridCheckBoxColumn IsReadOnly binding di proprietà

Ecco XAML in cui ho provato un DataGridCheckBoxColumn-

<DataGridCheckBoxColumn Binding="{Binding IsChecked}" IsReadOnly="{Binding AccountComponents/Enabled}"/> 

Ecco XAML in cui ho provato un DataGridTemplateColumn-

<DataGridTemplateColumn Header=""> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Grid> 
           <CheckBox IsChecked="{Binding IsChecked,Mode=TwoWay}" IsEnabled="False"/> 
          </Grid> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
        <DataGridTemplateColumn.CellEditingTemplate> 
         <DataTemplate> 
          <Grid> 
           <CheckBox IsChecked="{Binding IsChecked,Mode=TwoWay}" IsEnabled="{Binding Enabled}"/> 
          </Grid> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellEditingTemplate> 
       </DataGridTemplateColumn> 

Qualsiasi aiuto per capire questo fuori è molto apprezzato.

+0

Quali messaggi si ottengono dalla finestra di output? –

+0

È lo stesso per * qualsiasi * proprietà su * qualsiasi * tipo di colonna. Riassumi il tuo problema, cerca, trova la soluzione. –

risposta

5

In primo luogo, non è necessario specificare un CellEditingTemplate quando si utilizzano solo CheckBox. Gli stessi CheckBox sono "modificabili/controllabili". Quindi rimuovere quello CellEditingTemplate poiché questo non ha senso.

Hai cercato di associare la proprietà IsEnabled del CheckBox direttamente alla vostra proprietà Enabled del vostro AccountComponent nel CellTemplate (come avete fatto nel CellEditingTemplate)? Questo dovrebbe risolvere il tuo problema.

<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <Grid> 
      <CheckBox IsChecked="{Binding IsChecked,Mode=TwoWay}" 
         IsEnabled="{Binding Enabled}"/> 
     </Grid> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 
+1

Grazie Markus che ha funzionato. Puoi dirmi perché il binding alla proprietà IsReadOnly su DataGridCheckBoxColumn non funzionerebbe? –

+0

Non l'ho ancora testato, ma l'espressione di binding con "AccountComponents/Enabled" sembra sospetta. Questo è normalmente utilizzato per scenari Master/Dettagli in cui in quel caso hai già i tuoi dettagli. Il mio primo tentativo sarebbe IsReadOnly = "{Binding Enabled}" – Markus

+0

Ho pensato che fosse anche strano ma questa è la sintassi VS creata quando ho scelto Enabled dalla finestra popup del databinding. Ho provato la tua suggerimento ma non ha funzionato. Credo che rimarrò con datatemplatecolumn. Grazie per l'aiuto. –

Problemi correlati