Странное поведение при замене DataGridCheckBoxColumn на DataGridTemplateColumn - PullRequest
0 голосов
/ 24 июня 2011

Я обнаружил странное поведение при замене DataGridCheckBoxColumn на DataGridTemplateColumn, который содержит флажок.

 <sdk:DataGrid Grid.Column="0" IsReadOnly="{Binding IsInReadOnlyMode}">                                        
   <sdk:DataGrid.Columns>
     <sdk:DataGridCheckBoxColumn Header="Sales" Binding="{Binding Path=Sales}" />
   </sdk:DataGrid.Columns>
 </sdk:DataGrid>

Когда DataGrid доступен только для чтения, флажок также отключается. Код выше работает правильно.

Теперь, если я хочу добиться того же, используя DataGridTemplateColumn, флажок, по-видимому, не отключается, когда DataGrid находится в режиме ReadOnly.

<sdk:DataGrid Grid.Column="0" IsReadOnly="{Binding IsInReadOnlyMode}">                                        
   <sdk:DataGrid.Columns>
     <sdk:DataGridTemplateColumn Header="Sales" >
                            <sdk:DataGridTemplateColumn.CellEditingTemplate>
                                <DataTemplate>
                                    <Grid>
                                        <CheckBox>
                                            <CheckBox.IsChecked>
                                                <Binding Path="Sales" Mode="TwoWay"/>
                                            </CheckBox.IsChecked>
                                        </CheckBox>
                                    </Grid>
                                </DataTemplate>
                            </sdk:DataGridTemplateColumn.CellEditingTemplate>
                            <sdk:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Grid>
                                        <CheckBox>
                                            <CheckBox.IsChecked>
                                                <Binding Path="Sales" Mode="TwoWay"/>
                                            </CheckBox.IsChecked>
                                        </CheckBox>
                                    </Grid>
                                </DataTemplate>
                            </sdk:DataGridTemplateColumn.CellTemplate>
                        </sdk:DataGridTemplateColumn>
   </sdk:DataGrid.Columns>
 </sdk:DataGrid>

Еще одна вещь, которую я заметил, которая может помочь объяснить это, заключается в том, что флажок внутри DataGridCheckBoxColumn всегда отключен, пока вы фактически не дважды щелкнете содержащую ячейку. Только тогда, когда в режиме редактирования я могу получить доступ к флажку.

В CheckBox, который я создал внутри DataGridTemplateColumn, флажок, кажется, всегда активен и может быть отмечен галочкой, даже если дважды не щелкнуть ячейку.

Кстати, я использую его в Silverlight4, но я почти уверен, что он должен быть таким же в WPF.

Может кто-нибудь объяснить мне, почему это, пожалуйста? Спасибо,

1 Ответ

0 голосов
/ 24 июня 2011

Что касается двойного щелчка в случае DataGridCheckBoxColumn и отсутствия щелчка в случае DataGridTemplateColumn, я думаю, что это происходит, потому что внутри DataGridCheckBoxColumn CellTemplate и EditingCellTemplate были бы реализованы по-разному.В случае CellTemplate это будет определено как readonly, и после двойного щелчка вы перейдете в режим редактирования, т.е. EditingCellTemplate, и только тогда вы сможете изменить checkbox, и это имеет смысл.

Теперьв вашем случае, поскольку вы определили оба шаблона редактирования и без редактирования, поэтому флажок всегда готов принять ввод

Относительно вашего основного вопроса, почему режим checkbox в custom template не являетсяследуя опции GridReadOnly, я думаю, что это происходит из-за того, что как только вы определяете cell templates себя, то есть cellEditing шаблон и non-editing celltemplate, вы берете на себя ответственность за управление поведением ячеек только для чтения.Опция, примененная к сетке, такая как только чтение, не будет иметь никакого эффекта в случае шаблонной колонки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...