WPF 08 - manejo y vinculación de datos

29
Manejo y Vinculación de Datos DANAE AGUILAR GUZMÁN. MCP, MCTS [email protected]

Transcript of WPF 08 - manejo y vinculación de datos

Page 1: WPF 08 - manejo y vinculación de datos

Manejo y Vinculación de Datos D A N A E A G U I L A R G U Z M Á N .

M C P , M C T S

D A N A E A G U I L A R @ G M A I L . C O M

Page 2: WPF 08 - manejo y vinculación de datos

Contenido del Módulo Lección 1. Plantillas de Datos

Lección 2. DataTrigger y MultiDataTrigger

Lección 3. El Datagrid de WPF

Lección 4. ObjectDataProvider y XmlDataProvider

Lección 5. Validación de datos

Page 3: WPF 08 - manejo y vinculación de datos

Lección 1. Plantillas de Datos 1. Implementando plantillas de datos

2. Usando plantillas con controles de ítems

3. DataTrigger y MultiDataTrigger

Page 4: WPF 08 - manejo y vinculación de datos

1. Implementando plantillas de datos

1. Definir el DataTemplate:

2. Aplicar el DataTemplate como ContentTemplate:

<DataTemplate> <Label Content="{Binding Path=Nombre}" BorderBrush="DarkBlue" Background="LightGreen" BorderThickness="3" Foreground="Blue" /> </DataTemplate>

<Label Height="25" Name="label1" Width="150"> <Label.ContentTemplate> <DataTemplate> <!--Contenido del template--> </DataTemplate> </Label.ContentTemplate> </Label>

Page 5: WPF 08 - manejo y vinculación de datos

2. Usando plantillas con controles de ítems

3. Aplicar el DataTemplate a la propiedad ItemTemplate:

<ListBox ItemsSource="{Binding}" Name="listBox1" IsSynchronizedWithCurrentItem="True">

<ListBox.ItemTemplate> <DataTemplate> <!--Contenido del Template--> </DataTemplate> </ListBox.ItemTemplate> </ListBox>

Page 6: WPF 08 - manejo y vinculación de datos

Lección 2. DataTrigger y MultiDataTrigger

1. DataTrigger

2. MultiDataTrigger

Page 7: WPF 08 - manejo y vinculación de datos

1. DataTrigger DataTrigger

Similar a Property Trigger pero la propiedad que monitorea usa binding

En vez de la propiedad Property usa la propiedad Binding

Page 8: WPF 08 - manejo y vinculación de datos

1. DataTrigger DataTrigger

<Style.Triggers> <DataTrigger Binding="{Binding Path=Year}" Value="2011"> <Setter Property="Label.Background" Value="Red" /> </DataTrigger> </Style.Triggers>

Page 9: WPF 08 - manejo y vinculación de datos

2. MultiDataTrigger MultiDataTrigger

<Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Path=Year}" Value="2011" /> <Condition Binding="{Binding Path=Publisher}" Value="Apress" /> </MultiDataTrigger.Conditions> <MultiDataTrigger.Setters> <Setter Property="Label.Background" Value="Red" /> </MultiDataTrigger.Setters> </MultiDataTrigger> </Style.Triggers>

Page 10: WPF 08 - manejo y vinculación de datos

Lección 3. El Datagrid de WPF 1. El DataGridView de Windows Forms

2. El Datagrid de WPF

3. DataGridTemplateColumn

4. Estilos en el DataGrid

Page 11: WPF 08 - manejo y vinculación de datos

1. El DataGridView de Windows Forms Eficiente manejo de datos.

UI Poco customizable

Page 12: WPF 08 - manejo y vinculación de datos

2. El Datagrid de WPF UI totalmente customizable.

Menor performance de datos.

Page 13: WPF 08 - manejo y vinculación de datos

2. El Datagrid de WPF Validación, selección y estilo.

Page 14: WPF 08 - manejo y vinculación de datos

2. El Datagrid de WPF Templates

Page 15: WPF 08 - manejo y vinculación de datos

2. El Datagrid de WPF • ItemsSource, para vincular los datos

En C#:

En XAML, (teniendo un DataContext):

• Crea automáticamente las columnas para los campos de la colección. (Según el tipo)

miDataGrid.ItemsSource = libros;

<DataGrid ItemsSource="{Binding}"></DataGrid>

Page 16: WPF 08 - manejo y vinculación de datos

2. El Datagrid de WPF • Columnas personalizadas

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}"> <DataGrid.Columns> <DataGridTextColumn Header="Materia" Width="2*" Binding="{Binding Path=Nombre}" /> <DataGridTextColumn Header="Código de la Materia" Width="1*" Binding="{Binding Path=Codigo}" /> </DataGrid.Columns> </DataGrid>

Page 17: WPF 08 - manejo y vinculación de datos

3. DataGridTemplateColumn 1. Definiendo los templates:

<Window.Resources> <DataTemplate x:Key="cabecera"> <Label Background="Blue" Foreground="Yellow" Content="{Binding}"/> </DataTemplate> <DataTemplate x:Key="celda"> <Button Foreground="Red" Content="{Binding Path=Codigo}"/> </DataTemplate> <DataTemplate x:Key="celdaEditable"> <TextBox Background="Red" Text="{Binding Path=Codigo}"/> </DataTemplate> </Window.Resources>

Page 18: WPF 08 - manejo y vinculación de datos

3. DataGridTemplateColumn

2. Aplicando los templates:

<DataGridTemplateColumn Header="Código de Materia" HeaderTemplate="{StaticResource cabecera}" CellTemplate="{StaticResource celda}" CellEditingTemplate="{StaticResource celdaEditable}"/>

Page 19: WPF 08 - manejo y vinculación de datos

4. Estilos en el DataGrid • Estilos en el DataGrid:

<DataGrid.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="Foreground" Value="Green" /> <Setter Property="FontWeight" Value="Bold" /> </Style> </DataGrid.CellStyle>

Page 20: WPF 08 - manejo y vinculación de datos

4. Estilos en el DataGrid • Estilos en las columnas:

<DataGridTextColumn Header="Materia" Binding="{Binding Path=Nombre}" > <DataGridTextColumn.EditingElementStyle> <Style TargetType="TextBox"> <Setter Property="Foreground" Value="Red" /> </Style> </DataGridTextColumn.EditingElementStyle> <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="Foreground" Value="LightBlue" /> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn>

Page 21: WPF 08 - manejo y vinculación de datos

Lección 4. ObjectDataProvider y XmlDataProvider

1. ObjectDataProvider

2. XmlDataProvider

Page 22: WPF 08 - manejo y vinculación de datos

1. ObjectDataProvider ObjectDataProvider:

Binding a métodos:

<Window.Resources> <ObjectDataProvider x:Key="miProviderMaterias" ObjectType="{x:Type local:Estudiante}" MethodName="GetMaterias"> <ObjectDataProvider.ConstructorParameters> <system:String>Juanito</system:String> </ObjectDataProvider.ConstructorParameters> <ObjectDataProvider.MethodParameters> <system:Int32>1</system:Int32> <system:Int32>2012</system:Int32> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources>

Page 23: WPF 08 - manejo y vinculación de datos

1. XmlDataProvider XmlDataProvider:

Binding a archivos XML (Solo lectura)

XPath posible también en la vinculación:

<Window.Resources> <XmlDataProvider x:Key="libros" Source="Books.xml" XPath="Books" /> </Window.Resources>

<ListBox ItemsSource="{Binding Source={StaticResource libros}, XPath=Book[Year&gt;2009]}" DisplayMemberPath="Title" />

Page 24: WPF 08 - manejo y vinculación de datos

Lección 5. Validación de datos 1. Validación de entradas de usuario

2. Validación de datos

3. Reglas de validación

Page 25: WPF 08 - manejo y vinculación de datos

1. Validación de entradas de usuario

Implementando IDataErrorInfo

public class Estudiante : System.ComponentModel.IDataErrorInfo { public string Nombre { get; set; } public string Apellido { get; set; } public string Error { get { /*...*/ } } public string this[string columna] { get { /*...*/ } } }

Page 26: WPF 08 - manejo y vinculación de datos

1. Validación de entradas de usuario

La propiedad ValidatesOnDataErrors

Mostrando los errores:

<TextBox.Text> <Binding Source="{StaticResource MiColeccion}" Path="Nombre" UpdateSourceTrigger="LostFocus"

ValidatesOnDataErrors="True"/> </TextBox.Text>

<Style 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>

Page 27: WPF 08 - manejo y vinculación de datos

2. Validación de datos Validación de datos vinculados:

ExceptionValidationRule:

<TextBox> <TextBox.Text> <Binding Path="Propiedad1">

<Binding.ValidationRules> <local:ReglaDeValidacion1 /> <local:ReglaDeValidacion2 />

</Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox>

<Binding Path="Propiedad1"> <Binding.ValidationRules>

<ExceptionValidationRule /> </Binding.ValidationRules> </Binding>

Page 28: WPF 08 - manejo y vinculación de datos

3. Reglas de validación 1. Heredando la clase Abstracta ValidationRule:

public class MiValidador : System.Windows.Controls.ValidationRule { public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureinfo) { string cadena = value.ToString(); if (string.IsNullOrWhiteSpace(cadena)) { return new ValidationResult(false, "La cadena no puede ser vacia"); } return new ValidationResult(true, null); } }

Page 29: WPF 08 - manejo y vinculación de datos

3. Reglas de validación La propiedad NotifyOnValidationError:

1. Manejando el evento de error:

<Binding NotifyOnValidationError="True" Mode="TwoWay" Source="{StaticResource MiColeccion}" Path="Nombre"> <Binding.ValidationRules> <local:MiValidador/> </Binding.ValidationRules> </Binding>

<Grid Validation.Error="Grid_Error">

private void Grid_Error(object sender, ValidationErrorEventArgs e) { if (e.Action == ValidationErrorEventAction.Added) MessageBox.Show(e.Error.ErrorContent.ToString()); else System.Diagnostics.Trace.WriteLine("El error de validacion fue quitado"); }