如何在DataGrid WPF中找到引发事件的控件的兄弟

时间:2011-02-18 13:13:08

标签: wpf event-handling binding

我有一个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中的Button Click事件中找到这个Combobox。我正在使用DataTables来绑定网格。

1 个答案:

答案 0 :(得分:0)

(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