我有一个像下面一个Silverlight的DataGrid
<sdk:DataGrid Name="DataGridDream" AutoGenerateColumns="False" HeadersVisibility="None" Background="Yellow" HorizontalAlignment="Center" Height="100" VerticalAlignment="Center" Width="120" >
<sdk:DataGrid.Columns >
<sdk:DataGridTextColumn Binding="{Binding By}" >
</sdk:DataGridTextColumn>
<sdk:DataGridTextColumn Binding="{Binding UserName}" >
</sdk:DataGridTextColumn>
<sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Name="ButtonSave" Content="Take" Click="ButtonSave_Click">
</Button>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
和我有内部的DataGrid按钮的Click事件,
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
int Value = // Value of the UserId column when a button is clicked on that row
}
怎么做 ?
这将让你点击行UserName
属性的值:
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
string userName = (((Button)sender).DataContext as ModelClass).UserName;
}
ModelClass是你的财产所在,即底层源类的绑定。
您可以从DataGrid中的选定项目尝试这样的事:
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
var row = (int)DataGridDream.SelectedItem;
}
您可以获取当前行值的动态对象。您可以使用该对象访问网格行中的所有值。
迈克·施瓦茨的solution的修改后的版本将是
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
dynamic row = DataGridDream.SelectedItem;
}
您还可以得到该行的值作为罗希特大桶suggested。但是,通过使用动态关键字,您就不必声明Model类。
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
dynamic row = ((Button)sender).DataContext;
}
在此之后,你可以像这样访问的用户名
var UserName = row.UserName;