DataGridCheckboxColumn to DataGridTemplateColumn - PullRequest
1 голос
/ 23 июня 2011

Внутри DataGrid я бы хотел изменить цвет строк в соответствии с определенными условиями в ViewModel.

Хотя это кажется легкой задачей в WPF, в Silverlight вы не можете иметь привязки к свойствам в определениях стиля, но вы не сможете использовать RowBackground сетки данных.

Вместо этого мне пришлось изменить каждый заголовок столбца с DataGridTextColumn на DataGridTemplateColumn и создать собственное текстовое поле, обернутое сеткой. Там я бы привязал Background of Grid к условному выбору цвета в моей ViewModel.

Это все отлично работает. Однако у меня возникает проблема, когда я пытаюсь реплицировать DataGridCheckboxColumn в DataGridTemplateColumn. Также здесь я создаю флажок в сетке и могу соответствующим образом установить цвет, однако флажок может быть даже отмечен и выключен, даже если для сетки данных установлено значение Только для чтения. Флажок внутри, кажется, не заботится о состоянии чтения данных только для чтения.

<sdk:DataGridTemplateColumn.CellTemplate>
 <DataTemplate>
  <Grid>
    <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center">
       <CheckBox.IsChecked>
          <Binding Path=Sales Mode="TwoWays"/>
       <CheckBox.IsChecked>
    </CheckBox> 
  </Grid>
 </DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>

Кто-нибудь знает, почему и есть ли более эффективный способ сделать то, чего я пытаюсь достичь в Silverlight?

Большое спасибо,

1 Ответ

2 голосов
/ 23 июня 2011

Вам необходимо указать CellTemplate и CellEditingTemplate для DataGridTemplateColumn. Должно работать что-то вроде следующего:

<sdk:DataGridTemplateColumn IsReadOnly="True">
    <sdk:DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <CheckBox HorizontalAlignment="Center"
                      VerticalAlignment="Center"
                      IsChecked="{Binding SomeProperty}">
            </CheckBox>
        </DataTemplate>
    </sdk:DataGridTemplateColumn.CellEditingTemplate>
    <sdk:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox HorizontalAlignment="Center"
                      VerticalAlignment="Center"
                      IsChecked="{Binding SomeProperty}"
                      IsEnabled="False">
            </CheckBox>
        </DataTemplate>
    </sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>

Этот обходной путь для привязок в стиле может также представлять интерес.

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