Posso definir CellTemplate de DataGrid como um recurso para que possa ser reutilizado em várias colunas?
-
27-10-2019 - |
Pergunta
Quero um modelo específico para todas as minhas colunas no DataGrid.O método usual é replicarei todo o XAML para DataTemplate várias vezes no DataGrid em cada coluna.
Existe alguma maneira de definir o CellTemplate globalmente como um recurso e, em seguida, apenas passar a propriedade "Path" de "Binding" para ele, para que ele exiba o item correto do DataContext?
Isso é possível?
Solução
Crie DataTemplate no arquivo App.Xaml com chave / nome.
<DataTemplate x:Name="myTemplate" TargetType="sdk:DataGridTemplateColumn">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding FirstName}" BorderThickness="0"/>
<TextBox Text="{Binding LastName}" BorderThickness="0"/>
</StackPanel>
</DataTemplate>
Agora você pode usar este modelo em DataGrid como
<sdk:DataGridTemplateColumn Header="Name" CellTemplate={StaticResource myTemplate}>
OU
Você pode passar o nome do Binding Path no código, como ...
string colPath = "FirstName";
DataGrid grid = new DataGrid();
grid.ItemsSource = myViewModel.EmpCollection;
DataGridTemplateColumn column = new DataGridTemplateColumn();
DataTemplate itemTemplate = (DataTemplate)XamlReader.Load("<DataTemplate xmlns=\"http://schemas.microsoft.com/client/2007\"> <ContentPresenter Content=\"{Binding Path=" + colPath + "}\" /></DataTemplate>");
column.CellTemplate = itemTemplate;
grid.Columns[0] = column;
Espero que isso ajude.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow