I have a WINUI3 project in which I need to add an element, CheckBox inside a
CheckBox->DataTemplate->DataGridTemplateColumn.CellTemplate->DataGrid
While my DataGrid is defined in Xaml, I need to add the CheckBox inside DataTemplate progmatically using C#. For reasons unknown to me, I dont understand why its so complicated while its easily done in Xaml,in C# there seems to be no way.
private void CreateDataTableForBowlers()
{
allBowlers.Columns.Clear();
DataGridTextColumn column = new DataGridTextColumn() { Header = "Name", Binding = new Binding() { Path = new PropertyPath("Name") } };
column.FontSize = 10;
DataGridTemplateColumn dataGridTemplateColumn = new();
dataGridTemplateColumn.Header = "Select Two";
DataTemplate dataTemplate = new DataTemplate();
dataGridTemplateColumn.CellTemplate = dataTemplate;
CheckBox checkBox = new CheckBox();
checkBox.SetBinding(CheckBox.IsCheckedProperty, new Binding() { Path = new PropertyPath("isBowling") });
/*
* Need to add checkBox to dataTemplate here
*
*/
allBowlers.Columns.Add(dataGridTemplateColumn);
allBowlers.Columns.Add(column);
}
The Corresponding Xaml that I have is (For reference)
<controls:DataGridTemplateColumn Header="Select Two">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding GetBowling ,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Checked="CheckBox_Checked" />
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
I even tried XamlReader.Load
, for above XAML part which always ends in crashing. Anyone what am I missing in doing it in C#?
UPDATE
I had used XamlReader.Load
earlier and also as suggested by @Andrew KeepCoding but didnt work. I cant use string literals like """ as I am using Win10. So my code for XamlReader.Load
looks like this
private void CreateDataTableForBowlers()
{
allBowlers.Columns.Clear();
DataGridTextColumn column = new DataGridTextColumn() { Header = "Name", Binding = new Binding() { Path = new PropertyPath("Name") } };
column.FontSize = 10;
DataGridTemplateColumn dataGridTemplateColumn = new();
dataGridTemplateColumn.Header = "Select Two";
//CheckBox checkBox = new CheckBox();
//checkBox.SetBinding(CheckBox.IsCheckedProperty, new Binding() { Path = new PropertyPath("isBowling") });
string xaml = "<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'> <CheckBox IsChecked='{Binding IsBowling, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}' /></DataTemplate>";
DataTemplate dataTemplate = new DataTemplate();
dataTemplate = XamlReader.Load(GetStream(xaml)) as DataTemplate;
dataGridTemplateColumn.CellTemplate = dataTemplate;
allBowlers.Columns.Add(dataGridTemplateColumn);
allBowlers.Columns.Add(column);
}
private Stream GetStream(string input)
{
byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(input);
return new MemoryStream(byteArray);
}