<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:ComponentesAccesoDatos"
        Title="Componentes de acceso a datos" Height="300" Width="400" ResizeMode="NoResize" Loaded="Window_Loaded" >
  <Grid>
    <StackPanel>
      <TextBlock Name="tbTitulo" FontSize="20" Margin="4" Text="Lista de teléfonos:"/>
      <DataGrid Name="dgTelefonos" Margin="5" MaxHeight="230"
                AutoGenerateColumns="False"
                ItemsSource="{Binding}">
        <!-- Sección de recursos del DataGrid -->
        <DataGrid.Resources>
          <Style x:Key="EstiloDatosIncorrectos" TargetType="{x:Type TextBox}">
            <Style.Triggers>
              <Trigger Property="Validation.HasError" Value="True">
                <Setter Property="ToolTip" 
                        Value="{Binding RelativeSource={RelativeSource Self},
                                        Path=(Validation.Errors)[0].ErrorContent}"/>
              </Trigger>
            </Style.Triggers>
          </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
          <DataGridTextColumn Header="Nombre" MinWidth="240"
                              Binding="{Binding Path=Nombre, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}"
                              EditingElementStyle="{StaticResource EstiloDatosIncorrectos}"/>
          <DataGridTextColumn Header="Teléfono" MinWidth="120"
                              Binding="{Binding Path=Telefono, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
                              EditingElementStyle="{StaticResource EstiloDatosIncorrectos}"/>
        </DataGrid.Columns>
        <!-- Sección de detalles de la fila -->
        <DataGrid.RowDetailsTemplate>
          <DataTemplate>
            <Border BorderThickness="0" Background="BlanchedAlmond" Padding="5">
              <StackPanel>
                <TextBox Name="ctDir" Padding="2"
                         Text="{Binding Path=Direccion,
                                        UpdateSourceTrigger=PropertyChanged,
                                        ValidatesOnDataErrors=True}"
                         Style="{StaticResource EstiloDatosIncorrectos}"/>
                <TextBox Name="ctObs" Padding="2" Text="{Binding Path=Observaciones, UpdateSourceTrigger=PropertyChanged}" />
              </StackPanel>
            </Border>
          </DataTemplate>
        </DataGrid.RowDetailsTemplate>
        <!-- Reglas de validación de la fila -->
        <DataGrid.RowValidationRules>
          <local:ReglaValidacionFilaTfno ValidationStep="UpdatedValue"/>
        </DataGrid.RowValidationRules>
        <!-- Plantilla de validación de la fila -->
        <DataGrid.RowValidationErrorTemplate>
          <ControlTemplate>
            <Grid Margin="0,-1,0,-1"
                ToolTip="{Binding RelativeSource={
                                    RelativeSource Mode=FindAncestor,
                                    AncestorType={x:Type DataGridRow}},
                                  Path=(Validation.Errors)[0].ErrorContent}">
              <Ellipse StrokeThickness="0" Fill="Red"
                       Width="{TemplateBinding FontSize}"
                       Height="{TemplateBinding FontSize}"/>
              <TextBlock Text="!" FontSize="{TemplateBinding FontSize}"
                         FontWeight="Bold" Foreground="White"
                         HorizontalAlignment="Center"/>
            </Grid>
          </ControlTemplate>
        </DataGrid.RowValidationErrorTemplate>
      </DataGrid>
    </StackPanel>
  </Grid>
</Window>
