Il est difficile de travailler avec des modèles de contrôle dans le code. Dans WPF, la méthode standard et efficace consiste à créer la disposition de votre modèle en XAML. Ensuite, si vous devez transmettre des données à vos contrôles, utilisez la liaison de données. Normalement, vous ne devriez pas avoir besoin de construire des modèles en code, sauf dans de rares circonstances.
Pour obtenir le même effet que celui recherché ci-dessus en utilisant XAML, vous écrivez :
<DataGrid x:Name="dataGrid1">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="file:///C:\abc.png" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Si le chemin de l'image doit être dynamique pour chaque ligne de la grille, vous pouvez le modifier comme suit :
<DataGrid x:Name="dataGrid1" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding ImageFilePath}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
et voici un exemple de code pour remplir la grille avec des données :
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<MyDataObject> list = new List<MyDataObject>();
list.Add(new MyDataObject() { ImageFilePath = new Uri("file:///c:\\abc.png") });
list.Add(new MyDataObject() { ImageFilePath = new Uri("file:///c:\\def.png") });
dataGrid1.ItemsSource = list;
}
}
public class MyDataObject
{
public Uri ImageFilePath { get; set; }
}