Программно установите флажок (usercontrol) с помощью DataGrids (usercontrol) SelectedItem / Row WPF XAML - PullRequest
0 голосов
/ 21 октября 2011

У меня есть два пользовательских элемента управления.Сначала у меня есть пользовательский элемент управления checkbox, myCheckboxControl, (упрощенный xaml ниже)

<UserControl x:Class="UserControls.myCheckboxControl"><Grid>
        <CheckBox x:Name="chkboxList" HorizontalAlignment="Center" Checked="chkboxList_Checked">
</Grid></UserControl>

У меня также есть пользовательский элемент управления DataGrid (упрощенный xaml ниже), который содержит элемент управления checkbox в DataTemplate

<UserControlx:Class="UserControls.myDataGridControl"><DataGrid x:Name="dgMyGrid>
<DataGrid.Columns>
          <DataGridTemplateColumn x:Name="tempCol" Header="Checkbox(L)">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <localControls:myCheckboxControl x:Name="controlList"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

Тогда у меня есть DataGrid (myDataGridControl) в моем главном окне.

Вопрос, который у меня возникает, заключается в том, что у меня есть кнопка в главном окне.Когда эта кнопка нажата, мне нужно также установить флажок в myCheckboxControl.Я могу получить SelectedItem таблицы данных, но просто не знаю, как установить флажок для моего уровня 2 уровня.

Заранее спасибо.

1 Ответ

0 голосов
/ 21 октября 2011

Как вы уже знаете, этот флажок является потомком пользовательского элемента управления, размещенного в строке сетки данных.

Таким образом, вам придется разрешить эти 2 уровня границ, используя свойство-посредник * 1003.* держать CheckBox.IsChecked.Вы можете ввести новое свойство зависимостей в myCheckboxControl скажем IsCheckBoxChecked использование, которое в дальнейшем обсуждении.

Я использую другое свойство под названием Tag, которое является заполнителем для любой дополнительной информации, которую можно добавитьк элементу фреймворка.

    <UserControl x:Class="UserControls.myCheckboxControl">
        <Grid>
            <CheckBox x:Name="chkboxList"
                      HorizontalAlignment="Center"
                      IsChecked="{Binding
                                    Tag,
                                    RelativeSource={RelativeSource
                                        AncestorType={x:Type UserControl}}
                                    Mode=TwoWay}">
       </Grid>
   </UserControl>


   <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <localControls:myCheckboxControl
                       Tag="{Binding
                                IsSelected,
                                Mode=TwoWay,
                                RelativeSource={RelativeSource
                                   AncestorType={x:Type DataGridRow}}}"
                       x:Name="controlList"/>
        </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>  

Таким образом, когда вы программно выбираете строку (и) сетки данных, тогда будет установлен соответствующий флажок в этой строке.Кроме того, когда вы устанавливаете флажок, строка будет выделена, и наоборот.

Теперь, если вы не хотите, чтобы выбор выполнялся после установки флажка, вам нужно будет ввести свойство, основанное на уведомлении INotifyPropertyChanged.на уровне элемента строки.

Например, если вы связываете список сотрудников с сеткой данных, то каждый класс сотрудников должен иметь настраиваемое свойство с именем «IsSelected».Этот класс должен реализовывать интерфейс INotifyPropertyChanged и вызывать уведомление об изменении свойства от установщика о том, что свойство IsSelected.

В этом случае привязка изменяется на этот ...

            <localControls:myCheckboxControl
                       Tag="{Binding
                                IsSelected,
                                Mode=TwoWay}"
                       x:Name="controlList"/>

Дайте мне знать, если это поможет.

...