2011-02-18 89 views
1

我有一个DataGrid整个列在下面给出。如何找到在DataGrid中引发事件的控件的兄弟WPF

<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绑定网格。

回答

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