Search code examples
c#wpf.net-4.0wpfdatagrid

Datagrid get hidden cell from sellected row


Hi i have problem with accessing hidden value in DataGrid of selected Row:

<DataGrid Name="grid" ItemsSource ="{Binding}" IsReadOnly="True" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Id_user" Binding="{Binding id_user}" Visibility="Hidden"/>
        <DataGridTextColumn Header="A" Binding="{Binding A}" />
        <DataGridTextColumn Header="B" Binding="{Binding B}" />
    </DataGrid.Columns>

    <DataGrid.ItemContainerStyle>
        <Style TargetType="DataGridRow">
            <EventSetter Event="MouseDoubleClick" Handler="selectRow"/>
        </Style>
    </DataGrid.ItemContainerStyle>
</DataGrid>

This is code witch I use to do that, but I got that element doesnt exist.

private void selectRow(object sender, RoutedEventArgs e)
{
    DataRowView row = (DataRowView)grid.SelectedItems[0];
    var x = row["Id_user"];
    this.NavigationService.Navigate(new PageA((string)x));
}

Is there a simply way to do that?

EDIT:

row["ID"] is not SelectedItem.id. This is diffrent value.


Solution

  • You should move this logic to viewmodel. Event handler in code behind should look like this:

    private void selectRow(object sender,RoutedEventArgs  e) 
    {
        ViewModel.Navigate();
    }
    

    And here is Navigate() implemetation:

    public void Navigate()
    {
        NavigationService.Navigate(new PageA(SelectedItem.id_user));
    }
    

    All thats left to do is to bind SelectedItem property on view model to your DataGrid

    <DataGrid Name="grid" SelectedItem="{Binding SelectedItem}" ItemsSource ="{Binding Collection}"  IsReadOnly="True" AutoGenerateColumns="False" >