2010-08-17 5 views
4

J'espère que ce sera une réponse très simple, je ne vois pas le bois proverbiale pour les arbres, je pense.WPF DataGrid Binding DataGridCell Content

J'ai un style DataGridCell dans lequel je veux lier le contenu de la cellule à la propriété source d'une image, voici le XAML J'utilise au moment:

<Style x:Key="DataGridImageCellStyle" TargetType="{x:Type toolkit:DataGridCell}"> 
    <Setter Property="Background" Value="Transparent" /> 
    <Setter Property="BorderBrush" Value="Transparent" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type toolkit:DataGridCell}"> 
       <Border Background="Transparent" 
       BorderBrush="{TemplateBinding BorderBrush}" 
       BorderThickness="0" 
       SnapsToDevicePixels="True"> 
        <Image Source="{Binding RelativeSource={RelativeSource AncestorType=toolkit:DataGridCell}, Path=Content}" /> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Notez que en ce moment je lie la source d'image au contenu .. qui ne fonctionne pas, j'ai également essayé la valeur, qui n'a pas fonctionné!

Donc, ma question est, agréable et simplement .. quelle est la liaison correcte à utiliser pour obtenir le contenu de la cellule dans la propriété de la source de cette image?

Merci d'avance!

Pete

Répondre

6

Si la colonne est un DataGridTextColumn alors vous pourriez être en mesure de se lier à la propriété Text du TextBlock qui est son contenu:

<Image Source="{Binding RelativeSource= 
    {RelativeSource AncestorType=DataGridCell}, Path=Content.Text}" /> 

C'est vraiment un hack, cependant. Si vous souhaitez afficher une image dans une colonne, vous devriez probablement utiliser un DataGridTemplateColumn:

<DataGridTemplateColumn Header="..."> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Image Source="{Binding SomeProperty}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Où SomeProperty est la propriété de votre objet de ligne qui a le chemin de l'image.

+0

Merci pour la réponse, j'ai fini par opter pour le hack pour éviter de couler plus de temps dedans! Par curiosité ... si je devais utiliser un DataGridTemplateColumn, à quoi s'attendriez-vous que le chemin de liaison soit donné que la cellule soit liée à une cellule dans un DataTableRow? merci encore! – GreatSeaSpider

+0

@GreatSeaSpider: Je pense que lorsque vous vous connectez à un DataTable, vous utilisez les valeurs DataColumn.ColumnName comme chemin de liaison. – Quartermeister