Tengo una colección de objetos que tienen a su vez una colección de otros objetos de la siguiente manera:
public class Elemento { public string Nombre {get; set;} public ObservableCollection<OtroObjeto> Lista {get; set;} }
En WPF, enlazo una colección de “Elemento” en un DataGrid de esta manera:
<DataGrid ItemsSource={Binding ColeccionElementos}> <DataGridTextColumn Header="Nombre" Binding="{Binding Nombre}"/> <DataGridTextColumn Header="Dia 1" Binding="{Binding Lista[0].Dia}"/> <DataGridTextColumn Header="Dia 2" Binding="{Binding Lista[1].Dia}"/> <DataGridTextColumn Header="Dia 3" Binding="{Binding Lista[2].Dia}"/> </DataGrid>
Hasta aquí, todo funciona bien.
Si quiero cambiar el fondo de una celda en función del valor del día del elemento correspondiente a la columna, lo puedo hacer así, y funciona bien (Uso un convertidor que transforma el dato en un color).
<DataGrid ItemsSource={Binding ColeccionElementos}> <DataGridTextColumn Header="Nombre" Binding="{Binding Nombre}"> <DataGridTextColumn Header="Dia 1" Binding="{Binding Lista[0].Dia}"> <DataGridTextColumn.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="Background" Value="{Binding Lista[0].Dato, Converter={StaticResource MiConvertidor}}"/> </Style> </DataGridTextColumn.CellStyle> </DataGridTextColumn> ... </DataGrid>
El problema surge cuando quiero trasladar el estilo de la celda a un ResourceDictionary. Lo pongo así, pero me colorea toda la fila en función del dato del primer día.
<Style x:Key="EstiloCelda" TargetType="DataGridCell"> <Setter Property="Background" Value="{Binding Lista/Dato, Converter={StaticResource MiConvertidor}}"/> </Style>
He probado también Lista[/].Dato
y muchas otras combinaciones y el resultado es, o el mismo, o no reconoce el Binding.
¿Cómo puedo hacer referencia al elemento actual de la Lista desde el ResourceDictionary?
Gracias y un saludo.