Hello,
In my datagrid, I use a custom DataTemplate for one of my (autogenerated) columns:
01.Public Class CustomGenerateColumnCommand02. Implements ICommand03. 04. Public Event CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged05. 06. Public Sub Execute(parameter As Object) Implements ICommand.Execute07. Dim context As GenerateColumnContext = CType(parameter, GenerateColumnContext)08. If context.PropertyName = "myColumnName" Then09. Dim c As New DataGridTemplateColumn10. c.CellContentTemplate = CType(XamlReader.Load("" &11. "<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:common=""using:MyNS.Converters"">" &12. "<Grid Background=""{Binding StatusColor}"">" &13. "<Grid.ColumnDefinitions>" &14. "<ColumnDefinition Width=""70""/>" &15. "<ColumnDefinition Width=""220"" /> " &16. "</Grid.ColumnDefinitions>" &17. "<TextBlock Text=""{Binding Title}"" Style=""{StaticResource SubtitleTextBlockStyle}"" TextTrimming=""CharacterEllipsis"" Height=""20"" FontSize=""16""/>" &18. "</Grid>" &19. "</DataTemplate>"), DataTemplate)20. c.Name = "myColumnName"21. context.Result = c22. End If23. End Sub24. 25. Public Function CanExecute(parameter As Object) As Boolean Implements ICommand.CanExecute26. 'exclude those properties 27. Dim context As GenerateColumnContext = CType(parameter, GenerateColumnContext)28. Return context.PropertyName <> "StatusColor" And context.PropertyName <> "Title"29. End FunctionThe above works perfectly. Both properties StatusColor and Title are used in one custom formatted cell.
My questions:
- I have been unable to use a binding converter to modify the appearance of the data to be displayed
For example like this:
<Grid Background="{Binding StatusColor, Converter={StaticResource myColorConverter}}">Having myColorConverter well defined and accessible in myNS.Converters. I have tried to add the static resource in the DataTemplate, or in the grid resources or even in the top page xaml resources, but each time I get "resource could not be found".
How can I use a Binding Converter in this situation ?
- I have been unable to attach an event to any of the template's Element. The goal is to navigate to a new frame of the application when the user taps the generated cell above.
For example like this:
<TextBlock Text="{Binding Title}" Tapped="myTxt_Tapped" x:Name="myTxt" />My code behind would of course contain an event handler like this:
Private Sub myTxt_Tapped(sender As Object, e As TappedRoutedEventArgs)'navigate to nextPageEnd SubBut that never gets fired. And I would expect it to fail anyway because my grid has multiple rows and thus I get multiple times the same TextBlock name ; meaning I need to attach an event handler, but how, and at which moment in the page lifecycle ?
I have also tried to use the CellTap DataGridCommand, but when I use
Public Overrides Sub Execute(parameter As Object) Dim context = CType(parameter, DataGridCellInfo) If context.Column.Name = "myColumnName" Then Dim dob As myObject= CType(context.Item.myColumnName, myObject) CType(Window.Current.Content, Frame).Navigate(GetType(nextPage), dob) End IfEnd Subthe last line throws a Memory Violation Exception.
How can I register an event ? How can I navigate to a new frame ?
Thanks for any help
Julien