Как найти одноуровневый элемент управления, вызвавший событие в DataGrid WPF - PullRequest
1 голос
/ 18 февраля 2011

У меня есть DataGrid, целые столбцы приведены ниже.

<my:DataGrid.Columns>
    <my:DataGridTemplateColumn  Header="Last Name" MinWidth="160" SortMemberPath="[LAST_NAME]">
        <my:DataGridTemplateColumn.CellTemplate >
            <DataTemplate>
                <TextBlock Name="lblLastName" Padding="5" 
                   Text="{Binding [LAST_NAME]}" />
            </DataTemplate>
        </my:DataGridTemplateColumn.CellTemplate>
    </my:DataGridTemplateColumn>
    <my:DataGridTemplateColumn Header="New Age Group" IsReadOnly="True" 
                 MinWidth="130">
        <my:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <ComboBox SelectedValue="{Binding AgeGroupId}" 
                      DisplayMemberPath="AgeGroupName" ItemsSource="{Binding}"
                      Name="ddlNewAgeGroup" Loaded="ddlNewAgeGroup_Loaded"/>
            </DataTemplate>
        </my:DataGridTemplateColumn.CellTemplate>
    </my:DataGridTemplateColumn>
    <my:DataGridTemplateColumn Header="Update" MinWidth="75" Width="100">
        <my:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Button Content="Update" Name="btnUpdate" Click="btnUpdate_Click"/>
            </DataTemplate>
        </my:DataGridTemplateColumn.CellTemplate>
    </my:DataGridTemplateColumn>
  </my:DataGrid.Columns>

В событии btnUpdate_Click я хочу получить значение, установленное для ddlNewAgeGroup

Но я не знаю, как найтиэтот комбинированный список для события нажатия кнопки в WPF.Я использую DataTables для привязки сеток.

1 Ответ

0 голосов
/ 19 февраля 2011

(e.OriginalSource as Button).DataContext должен быть объектом, связанным с вашей строкой, поэтому он должен иметь свойство AgeGroupId (как видно из ComboBox.SelectedValue), и это коллекция (как видно из ComboBox.ItemsSource). Таким образом, вы можете найти использование AgeGroupName следующим образом:

private void Grid_Click(object sender, RoutedEventArgs e) {
    var row = (e.OriginalSource as Button).DataContext as %YourDataType%;
    var agegroupname = row.First(item => item.AgeGroupId == row.AgeGroupId).AgeGroupName;
    // TODO: do what you need with "agegroupname".
}

PS. Пожалуйста, установите ComboBox.SelectedValuePath на что-то вроде AgeGroupId: без него ComboBox.SelectedValue равно целой записи, а не только Id

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