DataGridCheckBox инициализировать для всех отмеченных

#c# #wpf #datagrid

#c# #wpf #datagrid

Вопрос:

Я использую .Net 3.5 с WPF и XAML. У меня есть datagrid с первым столбцом, являющимся DataGridCheckBoxColumn. Это внутри всплывающего окна. В конструкторе иногда я хочу инициализировать все строки, которые должны быть выбраны, а в других случаях строки не должны быть выбраны.

Используя привязку данных, я могу инициализировать флажок в строке, чтобы он был либо установлен, либо не установлен.
Но я не могу установить флажок заголовка вместе со всеми проверками строк в случае, когда все строки должны быть проверены. Как я могу добраться до флажка?

 <toolkit:DataGridCheckBoxColumn  CellStyle="{StaticResource SingleClickEditing}"  Visibility="{Binding exists}" Binding="{Binding Path=toTransfer, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False">
    <toolkit:DataGridCheckBoxColumn.HeaderTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
            <CheckBox Checked="CheckBox_Checked" Unchecked="CheckBox_Checked"/>
             </StackPanel>
         </DataTemplate>
    </toolkit:DataGridCheckBoxColumn.HeaderTemplate>
</toolkit:DataGridCheckBoxColumn>
  

Я делаю что-то вроде:

 public MyPopupWindow()
{
        InitializeComponent();

        if(checkMode.Equals("all"))
        {
            // Check all the items
            foreach (var item in bindList)
            {
                item.toTransfer = true;
            }
            // How to check the header checkbox?
        }
  

Ответ №1:

Я не уверен, что это лучший способ сделать это, но вы можете сделать

 <CheckBox Checked="CheckBox_Checked" Unchecked="CheckBox_Checked" Loaded="CheckBox_Loaded"/>
  

и

 void CheckBox_Loaded(object sender, RoutedEventArgs e)
    {
        CheckBox checkBox = sender as CheckBox;
        if(checkMode.Equals("all"))
        {
             checkBox.IsChecked = true;
        } 
    }