2013-06-18 14 views
6

Chciałbym, aby kolumna pole wyboru w moim datagrid włączone/wyłączone dla każdego wiersza w zależności od wartości w kolekcji. Mam ObservableCollection o nazwie AccountComponents, która jest zbiorem klasy o nazwie AccountComponent, która ma właściwość boolean o nazwie Enabled. Próbowałem powiązać właściwość Enabled z IsReadOnly i IsEnabled bez powodzenia.DataGridCheckBoxColumn IsReadOnly Właściwość wiązania

Oto XAML gdzie próbowałem DataGridCheckBoxColumn-

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

Oto XAML gdzie próbowałem 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> 

Każda pomoc to zastanawianie się jest bardzo doceniana.

+0

Jakie wiadomości otrzymujesz z okna Wyjście? –

+0

To samo dotyczy * dowolnej * właściwości w * dowolnym * typie kolumny. Zredukuj swój problem, wyszukaj, znajdź rozwiązanie. –

Odpowiedz

5

Po pierwsze, nie trzeba określać CellEditingTemplate podczas korzystania z CheckBox. Pola CheckBox są "edytowalne/sprawdzalne". Usuń więc tę CellEditingTemplate, ponieważ nie ma to sensu.

Czy próbowali powiązać właściwość CheckBox bezpośrednio IsEnabled do swojej własności swoimi AccountComponentEnabled w CellTemplate (jak to zrobiłeś w CellEditingTemplate)? To powinno rozwiązać twój problem.

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

Dziękuję Markus, który działał. Czy możesz mi powiedzieć, dlaczego powiązanie z właściwością IsReadOnly w DataGridCheckBoxColumn nie zadziałałoby? –

+0

Nie przetestowałem tego, ale wyrażenie wiążące z "AccountComponents/Enabled" wygląda podejrzanie. Zwykle jest to używane w scenariuszach Master/Detail, w których przypadku masz już swoje dane. Moja pierwsza próba to IsReadOnly = "{Binding Enabled}" – Markus

+0

Myślałem, że to też wygląda dziwnie, ale to jest składnia VS utworzona, gdy wybrałem Enabled z okna podręcznego databinding. Próbowałem twojej suggesstion, ale to nie zadziałało. Myślę, że będę trzymać się z datatemplatecolumn. Dzięki za pomoc. –