Este es el comportamiento esperado en realidad: el DataContex
t para DataGridCell
es la flecha completa.
por lo que tienen 3 soluciones: cualquiera de agregar la unión en el código detrás de la siguiente manera:
en el constructor de cada columna:
string source = String.Format(CultureInfo.InvariantCulture, "[{0}].", thisColumnIndex);
base.Binding = new Binding(source + "Text");
(usted tiene que encontrar una manera de conseguir la "thisColumnIndex "Por lo que a mí respecta, agrego las columnas inmediatamente después de crearlas, si simplemente coloco" dataGridOwner.Columns.Count "allí).
o ...
se puede encontrar una manera de conseguir el DataContext que desee en cada celda (intentado eso, pero ya que se rompe mal cuando la columna/fila de virtualización está encendido)
o ...
echar un vistazo allí :
Binding a cell object's property to a DataGridCell in WPF DataGrid
personalmente encuentro el primero que ser el mejor para mi propósito (ya que añado mis columnas en el código detrás de todos modos), pero esto es realmente hasta que al final ...
En lo que se refiere a columnHeaders (y sólo columnsHeaders, no filas), también puede explorar la forma "DataTemplate":
Conjunto de la cabecera de las columnas a la propia columna (de esa manera se establece la columna como DataContext para el encabezado) y usar un DataTemplate.
por ejemplo:
en cada clase columna:
private static DependencyProperty ColumnHeaderProperty = DependencyProperty.Register("ColumnHeader", typeof(MyDataGridColumnHeader), typeof(MyTextBoxColumn));
public MyDataGridColumnHeader ColumnHeader
{
get { return (MyDataGridColumnHeader)(GetValue(ColumnHeaderProperty)); }
set { SetValue(ColumnHeaderProperty, value); }
}
this.ColumnHeader = new MyDataGridColumnHeader();
Header = this;
y en su xaml de dataGrid, algo así como:
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Style.Setters>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="BorderThickness" Value="{Binding BorderThickness}" />
<Setter Property="BorderBrush" Value="{StaticResource DataGridLinesBrush}" />
<Setter Property="Background" Value="{StaticResource DataGridColumnHeaderBackground}" />
<Setter Property="FontFamily" Value="{Binding ColumnHeader.Font.Family, TargetNullValue={StaticResource DefaultFontFamily}}" />
<Setter Property="FontSize" Value="{Binding ColumnHeader.Font.Size, TargetNullValue={StaticResource DefaultFontSize}}" />
<Setter Property="FontStyle" Value="{Binding ColumnHeader.Font.Style, TargetNullValue=Normal}" />
<Setter Property="FontWeight" Value="{Binding ColumnHeader.Font.Weight, TargetNullValue=Bold}" />
<Setter Property="Foreground" Value="{Binding ColumnHeader.Font.Brush, TargetNullValue={StaticResource DataGridColumnHeaderForeground}}" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid Background="{Binding ColumnHeader.Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Image Name="LeftImage" Grid.Column="0" Stretch="None" Margin="3, 0, 0, 0" Source="{Binding ColumnHeader.LeftImage}" VerticalAlignment="Center"/>
<Image Name="RightImage" Grid.Column="2" Stretch="None" Margin="0, 0, 5, 0" Source="{Binding ColumnHeader.RightImage}" VerticalAlignment="Center"/>
<TextBlock Name="HeaderText"
Grid.Column="1"
VerticalAlignment="Center"
HorizontalAlignment="Center"
TextDecorations="{Binding ColumnHeader.Font.Decorations}"
Text="{Binding ColumnHeader.Text}" />
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</DataGrid.ColumnHeaderStyle>
por supuesto, mi clase "MyDataGridColumnHeader" contiene definiciones para todos las propiedades a las que se hace referencia aquí.
Espero que esto ayude.
También probé esto. Da el mismo resultado que el método FindAncestor en mi publicación. Es decir: se une correctamente, pero el "CurrentItem" del DataContext original se perdió. El culpable de mi problema es que estoy tratando de referirme a otra DataTable que tiene su propio CurrentItem (fila [0]); si me refiero solo a una propiedad simple, entonces su método y FindAncestor funcionarían bien. – vuduy
Ok, veo, entonces lo siento, pero no sé cuál podría ser el problema. Con suerte, alguien más sabrá –