Usuario
Controls Binding no funciona

Pregunta
-
Tengo una ventana con un Grid 'Padre' y otrp Grid en un Row del grid padre, el grid padre esta vinculado a un objeto llamado "PrePoliza" y el Grid Hijo a "PrePoliza.Cuenta", el Grid Padre funciona bien pero no funciona el Binding en el Grid hijo, este es el objeto vinculado:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Schema; using System.Xml.Serialization; namespace SAE_Connector { [XmlRoot("Configuracion")] public class clsConfig { [XmlElement] public Config config { get; set; } [XmlArrayItem] public List<PrePoliza> PrePolizas { get; set; } public clsConfig() { config = new Config(); PrePolizas = new List<PrePoliza>(); } } public class Config { [XmlAttribute] public string RutaDB { get; set; } public Config() { Impuestos = new clsImpuestos(); } private string _numEmp = ""; [XmlAttribute] public string NumEmp { get { return NumeroEmpresaGet(); } set { _numEmp = NumEmp; } } [XmlAttribute] public string InstanciaCompacSQL { get; set; } [XmlAttribute] public string EmpresaContPAQ { get; set; } [XmlAttribute] public string PassWord { get; set; } [XmlElement("Impuestos")] public clsImpuestos Impuestos { get; set; } private string NumeroEmpresaGet() { string _result = ""; string _emp = string.IsNullOrEmpty(RutaDB) == false ? Path.GetFileNameWithoutExtension(RutaDB) : string.Empty; if(string.IsNullOrEmpty(_emp)==false) { //SAE50EMPRE02 _result = _emp.Substring(_emp.Length - 2); } return _result; } } #region impuestos public class clsImpuestos { [XmlElement("Impuesto1")] public clsImpuesto1 impuesto1 { get; set; } [XmlElement("Impuesto2")] public clsImpuesto2 impuesto2 { get; set; } [XmlElement("Impuesto3")] public clsImpuesto3 impuesto3 { get; set; } [XmlElement("Impuesto4")] public clsImpuesto4 impuesto4 { get; set; } public clsImpuestos() { impuesto1 = new clsImpuesto1(); impuesto2 = new clsImpuesto2(); impuesto3 = new clsImpuesto3(); impuesto4 = new clsImpuesto4(); } } public class clsImpuesto1 { [XmlAttribute] public string Nombre { get; set; } [XmlAttribute] public double Tasa { get; set; } } public class clsImpuesto2 { [XmlAttribute] public string Nombre { get; set; } [XmlAttribute] public double Tasa { get; set; } } public class clsImpuesto3 { [XmlAttribute] public string Nombre { get; set; } [XmlAttribute] public double Tasa { get; set; } } public class clsImpuesto4 { [XmlAttribute] public string Nombre { get; set; } [XmlAttribute] public double Tasa { get; set; } } #endregion public enum eTipoPol { Ingresos, Egresos, Diario } public class PrePoliza { [XmlAttribute] public int Id { get; set; } [XmlAttribute] public eTipoPol tipoPol { get; set; } [XmlAttribute] public string Nombre { get; set; } [XmlAttribute] public string Concepto { get; set; } [XmlArrayItem] public List<Cuenta> Cuentas { get; set; } public enum eCargoAbono { Cargo, Abono } public enum eProporcion { SubTotal, Impuesto1, Impuesto2, Impuesto3, Impuesto4, Total } public enum eReferenciaConcepto { Vacio, Observaciones, Folio, Texto } public PrePoliza() { Cuentas = new List<Cuenta>(); } public class Cuenta { [XmlAttribute] public int Id { get; set; } [XmlAttribute] public string CuentaCod { get; set; } [XmlAttribute] public string Descripcion { get; set; } [XmlAttribute] public bool EsCuentaCte { get; set; } [XmlAttribute] public eCargoAbono CargoAbono { get; set; } [XmlAttribute] public eProporcion Proporcion { get; set; } [XmlAttribute] public eReferenciaConcepto Referencia { get; set; } [XmlAttribute] public string RefText { get; set; } [XmlAttribute] public eReferenciaConcepto Concepto { get; set; } [XmlAttribute] public string ConcText { get; set; } } } }
Y este es el XAML de la ventana:
<Window x:Class="wpfSaePolizas.xWindows.wPrePolizas" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Pre-Polizas" Height="600" Width="1000" Background="{StaticResource brBlue}" WindowState="Maximized" Loaded="Window_Loaded" > <Grid> <Grid.Resources> <Style TargetType="TextBlock" BasedOn="{StaticResource xTextBlockWhiteS}" > <Setter Property="FontWeight" Value="Normal" /> </Style> <Style TargetType="TextBox"> <Setter Property="Template" Value="{StaticResource TextBoxRoundCorners}" /> </Style> <Style TargetType="Border"> <Setter Property="CornerRadius" Value="5" /> </Style> </Grid.Resources> <Grid.RowDefinitions> <RowDefinition Height="70" /> <RowDefinition /> </Grid.RowDefinitions> <Border Grid.Row="0" BorderThickness="2" BorderBrush="{StaticResource brBorder}" Margin="5" > <Border.Resources> <Style TargetType="StackPanel" > <Setter Property="Orientation" Value="Horizontal" /> </Style> <Style TargetType="Image"> <Setter Property="Height" Value="20" /> </Style> </Border.Resources> <ToolBar Margin="5" Background="Transparent"> <Button Name="btnNva" Background="#FFFFD801" Width="90" Height="30" Click="btnNva_Click" > <Button.Content> <StackPanel> <Image Source="..\img\Add1.png" /> <TextBlock Text="Nueva" /> </StackPanel> </Button.Content> </Button> <Button Name="btnEliminar" Background="#FFFFD801" Width="90" Height="30" Click="btnEliminar_Click" > <Button.Content> <StackPanel> <Image Source="..\img\Del.png" /> <TextBlock Text="Eliminar" /> </StackPanel> </Button.Content> </Button> <Button Name="btnGuardar" Background="#FFFFD801" Width="90" Height="30" Click="btnGuardar_Click" > <Button.Content> <StackPanel> <Image Source="..\img\Save.png" /> <TextBlock Text="Guardar" /> </StackPanel> </Button.Content> </Button> <Button Name="btnSalir" Background="{StaticResource gradGris}" Width="90" Height="30" Click="btnSalir_Click"> <Button.Content> <StackPanel> <TextBlock Text="Salir" /> </StackPanel> </Button.Content> </Button> </ToolBar> </Border> <Grid Grid.Row="1"> <Grid.ColumnDefinitions> <ColumnDefinition Width="400" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <DataGrid Name="dgCuentas" Grid.Column="1" Background="Transparent" AutoGenerateColumns="True" ></DataGrid> <Border Name="brConfig" Grid.Column="0" BorderThickness="2" BorderBrush="{StaticResource brBorder}" Margin="5" > <Viewbox VerticalAlignment="Top" Margin="5"> <Grid Name="gridPrePoliza"> <Grid.ColumnDefinitions> <ColumnDefinition Width="1" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <TextBlock Text="Pre-Póliza:" Grid.Row="0" Grid.Column="0" /> <ComboBox Name="cmbPrePolizas" Grid.Row="0" Grid.Column="1" Margin="5" SelectionChanged="cmbPrePolizas_SelectionChanged" > <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Nombre}" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <TextBlock Text="Nombre:" Grid.Row="1" Grid.Column="0" /> <TextBox Name="txtNombre" Grid.Row="1" Grid.Column="1" Text="{Binding Nombre, UpdateSourceTrigger=PropertyChanged}" /> <TextBlock Text="Tipo de Póliza:" Grid.Row="2" Grid.Column="0" /> <ComboBox Name="cmbTiposPoliza" Grid.Row="2" Grid.Column="1" Margin="5" > <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding }" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <TextBlock Text="Concepto Póliza:" Grid.Row="3" Grid.Column="0" /> <TextBox Name="txtConceptoPol" Grid.Row="3" Grid.Column="1" Text="{Binding Concepto, UpdateSourceTrigger=PropertyChanged}" /> <Grid Name="gridCuenta" Grid.Row="4" Grid.ColumnSpan="2" Margin="0, 20" IsEnabled="False"> <Grid.ColumnDefinitions> <ColumnDefinition Width="90" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="Auto" /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <TextBlock Text="Cuenta:" Grid.Row="0" Grid.Column="0" /> <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="1"> <TextBox Name="Cuenta" Width="157" Text="{Binding Path=CuentaCod, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" TextChanged="Cuenta_TextChanged"/> <Button Name="btnCuentaBuscar" Content="..." Style="{StaticResource MetroButton}" Width="35" Click="btnCuentaBuscar_Click" Margin="0,0,0,3" VerticalAlignment="Bottom" /> </StackPanel> <TextBlock Name="lblCuentaNombre" Text="{Binding Path=Descripcion, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Grid.Row="1" Grid.ColumnSpan="2" TextWrapping="Wrap" HorizontalAlignment="Center" /> <CheckBox Name="chbEsCteProv" Grid.Row="2" Grid.ColumnSpan="2"> <CheckBox.Content> <TextBlock Text="Es Cuenta de Cliente/Proveedor" /> </CheckBox.Content> </CheckBox> <TextBlock Text="Cargo/Abono:" Grid.Row="3" Grid.Column="0" /> <ComboBox Name="cmbCargoAbono" Grid.Row="3" Grid.Column="1" Margin="5" SelectionChanged="cmbCargoAbono_SelectionChanged" > <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <TextBlock Text="Proporción:" Grid.Row="4" Grid.Column="0" /> <ComboBox Name="cmbProporcion" Grid.Row="4" Grid.Column="1" Margin="5" SelectionChanged="cmbProporcion_SelectionChanged" > <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <TextBlock Text="Referencia:" Grid.Row="5" Grid.Column="0" /> <ComboBox Name="cmbRefer" Grid.Row="5" Grid.Column="1" Margin="5" SelectionChanged="cmbRefer_SelectionChanged" > <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <TextBox Name="txtRefer" Grid.Row="6" Grid.ColumnSpan="2" IsEnabled="False" Text="{Binding Path=RefText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" /> <TextBlock Text="Concepto:" Grid.Row="7" Grid.Column="0" /> <ComboBox Name="cmbConcepto" Grid.Row="7" Grid.Column="1" Margin="5" SelectionChanged="cmbConcepto_SelectionChanged" > <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <TextBox Name="txtConcepto" Grid.Row="8" Grid.ColumnSpan="2" IsEnabled="False" Text="{Binding Path=ConcText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" /> </Grid> <Border Name="brCtasBotones" Grid.Row="5" Grid.ColumnSpan="2" BorderThickness="2" BorderBrush="{StaticResource brBorder}" Padding="5" CornerRadius="5"> <StackPanel Name="stackBotones" Orientation="Horizontal" HorizontalAlignment="Center" IsEnabled="False" > <Button Name="btnNvaCta" Background="#FFFFD801" Width="80" Height="30" Grid.Row="4" Click="btnNvaCta_Click" > <Button.Content> <StackPanel Orientation="Horizontal"> <Image Source="..\img\Nvo.png" Width="18" /> <TextBlock Text="Nueva" /> </StackPanel> </Button.Content> </Button> <Button Name="btnEliminarCta" Background="#FFFFD801" Width="80" Height="30" Grid.Row="4" Click="btnEliminarCta_Click" > <Button.Content> <StackPanel Orientation="Horizontal"> <Image Source="..\img\Del.png" Width="18" /> <TextBlock Text="Borrar" /> </StackPanel> </Button.Content> </Button> <Button Name="btnGuardarCta" Background="#FFFFD801" Width="80" Height="30" Grid.Row="4" Click="btnGuardarCta_Click" > <Button.Content> <StackPanel Orientation="Horizontal"> <Image Source="..\img\Save.png" Width="18" /> <TextBlock Text="Guardar" /> </StackPanel> </Button.Content> </Button> </StackPanel> </Border> </Grid> </Viewbox> </Border> </Grid> </Grid>
Al Inicio declaro dos variables, una tipo PrePoliza y otra tipo PrePoliza.Cuenta:
PrePoliza.Cuenta _cta = new PrePoliza.Cuenta(); PrePoliza _prepoliza = new PrePoliza();
Asi es como asigno el DataContext del Grid Padre:
_prepoliza = (PrePoliza)cmbPrePolizas.SelectedItem == null ? new PrePoliza() : (PrePoliza)cmbPrePolizas.SelectedItem; dgCuentas.ItemsSource = _prepoliza.Cuentas; gridPrePoliza.DataContext = _prepoliza == null ? new PrePoliza() : _prepoliza; cmbTiposPoliza.SelectedItem = _prepoliza.tipoPol;
Aqui para el Grid Hijo:
gridCuenta.DataContext = _cta;
Pero no se asigna las propiedades a los controles, que de momento solo hay 3 o 4 vinculados a Cuenta.
Qué estoy haciendo mal?