J'ai un DataGrid
avec une ligne qui contient une image. Cette image est liée par un déclencheur à un certain état. Lorsque l'état change, je veux changer l'image.
Le modèle lui-même est défini dans l'onglet HeaderStyle
d'un DataGridTemplateColumn
. Ce modèle a plusieurs reliures. La première liaison Day indique quel jour nous sommes et State change l'image avec un déclencheur.
Ces propriétés sont définies dans un ViewModel.
Propriétés :
public class HeaderItem
{
public string Day { get; set; }
public ValidationStatus State { get; set; }
}
this.HeaderItems = new ObservableCollection<HeaderItem>();
for (int i = 1; i < 15; i++)
{
this.HeaderItems.Add(new HeaderItem()
{
Day = i.ToString(),
State = ValidationStatus.Nieuw,
});
}
Datagrid :
<DataGrid x:Name="PersoneelsPrestatiesDataGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
AutoGenerateColumns="False" SelectionMode="Single" ItemsSource="{Binding CaregiverPerformances}" FrozenColumnCount="1" >
<DataGridTemplateColumn HeaderStyle="{StaticResource headerCenterAlignment}" Header="{Binding HeaderItems[1]}" Width="50">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{ Binding Performances[1].Duration,Converter={StaticResource timeSpanConverter},Mode=TwoWay}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock TextAlignment="Center" Text="{ Binding Performances[1].Duration,Converter={StaticResource timeSpanConverter}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid>
Datagrid HeaderStyleTemplate :
<Style x:Key="headerCenterAlignment" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{Binding Day}" />
<Image x:Name="imageValidation" Grid.Row="1" Width="16" Height="16" Source="{StaticResource imgBevestigd}" />
</Grid>
<ControlTemplate.Triggers>
<MultiDataTrigger >
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding State}" Value="Nieuw"/>
</MultiDataTrigger.Conditions>
<Setter TargetName="imageValidation" Property="Source" Value="{StaticResource imgGeenStatus}"/>
</MultiDataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Maintenant, lorsque je démarre le projet, les images ne s'affichent pas et j'obtiens cette erreur :
Erreur System.Windows.Data : 2 : Impossible de trouver le FrameworkElement ou le FrameworkContentElement régissant pour l'élément cible. BindingExpression:Path=HeaderItems[0] ; DataItem=null ; l'élément cible est 'DataGridTemplateColumn' (HashCode=26950454) ; la propriété cible est 'Header' (type 'Object').
Pourquoi cette erreur s'affiche-t-elle ?
4 votes
J'ai vérifié la solution proposée ci-dessus, mais elle ne fonctionne pas dans mon cas. Lorsque je passe à une autre solution comme dans le lien thomaslevesque.com/2011/03/21/ . L'idée est la même que la solution, au lieu d'utiliser FrameworkElement, ils ont créé une autre classe. Ensuite, cela fonctionne pour moi.
0 votes
Pour les autres qui ont atterri ici en cherchant le message d'erreur : La réponse à cette question similaire m'a permis de résoudre le problème assez facilement. stackoverflow.com/a/18657986/4961688