C# 如何获取Datagrid SelectedItem

C# 如何获取Datagrid SelectedItem,c#,wpf,datagrid,C#,Wpf,Datagrid,我想获取存储在我的DataGrid的第一个单元格中的值。当有人单击我的xaml上的更新按钮时,如何解析该值 Xaml代码 <DataGrid Name="GridStream" Style="{StaticResource GridDatabase}" Margin="5" Grid.Row="1" ItemsSource="{Binding}" AutoGenerateColumns="False" > <DataGrid.Resources> <Sty

我想获取存储在我的
DataGrid
的第一个单元格中的值。当有人单击我的xaml上的更新
按钮时,如何解析该值

Xaml代码

<DataGrid  Name="GridStream" Style="{StaticResource GridDatabase}" Margin="5" Grid.Row="1" ItemsSource="{Binding}" AutoGenerateColumns="False" >
<DataGrid.Resources>
    <Style TargetType="{x:Type DataGridColumnHeader}">
        <Setter Property="Background" Value="Turquoise"/>
        <Setter Property="Foreground" Value="Black"/>
        <Setter Property="FontWeight" Value="SemiBold"/>
        <Setter Property="Padding" Value="5"/>
        <Setter Property="BorderThickness" Value="0,0,1,2"/>
        <Setter Property="BorderBrush" Value="Black"/>
    </Style>
</DataGrid.Resources>
<DataGrid.Columns>
    <DataGridTextColumn Header="Stream Id" Width="*" Binding="{Binding streamid}"  />
    <DataGridTextColumn Header="Stream Name" Width="*" Binding="{Binding streamname}" />
    <DataGridTemplateColumn>
        <DataGridTemplateColumn.HeaderTemplate>
            <DataTemplate>
                <TextBlock Text="Action"></TextBlock>                            
            </DataTemplate>
        </DataGridTemplateColumn.HeaderTemplate>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Button Name="BtnUpdateStream" Content="Update" Style="{StaticResource BtnForm}" Click="BtnUpdateStream_Click"/>
                    <Button Name="BtnDeleteStream" Content="Delete" Style="{StaticResource BtnForm}" Click="BtnDeleteStream_Click"/>
                </StackPanel>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>

如果
DataGrid
ItemsSource
是一个
IEnumerable
,这应该可以工作:

如果没有选择项,或者当前选择项的类型不是
成员
,则不会显示表单

如果
项目资源
设置为
数据视图
,则该功能应能正常工作:

var x = GridStream.SelectedItem as DataRowView;
if (x != null)
{
    int Id = Convert.ToInt32(x["streamid"]);
    UpdateStream NewForm = new UpdateStream(Id);
    NewForm.Show();
}
如果要绑定到匿名类型的
IEnumerable
,可以使用
dynamic
关键字

private void BtnUpdateStream_Click(object sender, RoutedEventArgs e)
{
    dynamic x = GridStream.SelectedItem;
    if (x != null)
    {
        int Id = x.streamid;
        //...
    }
}

你的答案是否与OP的答案基本相同,只是你在检查可能的空值时有所不同?@RandRandom:“唯一”的区别?嗯,我的代码可以工作:)不清楚OP会出现什么错误(如果有)。当然,您应该检查null,以避免得到NullReferenceException。您还需要转换我的答案所解释的适当类型。我正在从一个mysql数据库填充datagrid,它工作得非常好。我得到的例外是:找不到类型或命名空间名称“member”(是否缺少using指令或程序集引用?),那么什么是“member”?这应该是你定制的…你从哪里弄来的?您需要显示您设置了ItemsSource并填充了DataGrid。如果您使用的是要绑定到的DataView,则可以将SelectedItem强制转换为DataRowView。请看我更新的答案以获取示例。谢谢champ!我明白了,DataView的概念很有魅力!
var x = GridStream.SelectedItem as DataRowView;
if (x != null)
{
    int Id = Convert.ToInt32(x["streamid"]);
    UpdateStream NewForm = new UpdateStream(Id);
    NewForm.Show();
}
private void BtnUpdateStream_Click(object sender, RoutedEventArgs e)
{
    dynamic x = GridStream.SelectedItem;
    if (x != null)
    {
        int Id = x.streamid;
        //...
    }
}