Установить привязку для компонентов DataTemplate в коде
Извините, если я не ясно, это не очень ясно, в моей голове тоже (особенно после попытки найти свой путь в других сообщениях: p)
Я хочу создать DataGrids в коде с нулями до множества столбцов, содержащих кнопку, которая будет вызывать одну и ту же функцию, но с "параметром" (разным для каждого столбца).
Вот что я получил до сих пор: DataGrid создан в коде DataTemplate, определенном в ресурсах xaml (с кнопкой) DataGridTemplateColumn, который использует вышеупомянутый DataTemplate.
Можно ли привязать свойства кнопки (в DataTemplate), свойства DataGridTemplateColumn (в моем случае заголовок столбца будет в порядке), и как?
Есть ли способ получить доступ к компонентам DataTemplate (например, к кнопке) в коде и изменить их свойства?
Можно ли (и не опасно) создать DataTemplate в коде? Я объявил мой в xaml, потому что я нашел пост, советующий сделать это вместо кода.
Спасибо за вашу помощь.
1 ответ
Chouppy
вы можете позволить XamlReader делать работу:
oDataTemplate = TryCast(System.Windows.Markup.XamlReader.Load(New System.Xml.XmlTextReader(New System.IO.StringReader(sXaml))), DataTemplate)
sXaml может быть таким (в моем случае это пользовательский контроль, содержащий несколько флажков, которые привязаны к полям с данными):
Dim sDelim As String = vbNewLine
Try
sXaml = "<DataTemplate " & sDelim
sXaml = sXaml & " xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""" & sDelim
sXaml = sXaml & " xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""" & sDelim
sXaml = sXaml & " xmlns:local=""clr-namespace:Infor.Blending.Admin.Client;assembly=Infor.Blending.Admin.Client""" & sDelim
sXaml = sXaml & " xmlns:dg=""http://schemas.microsoft.com/wpf/2008/toolkit""" & sDelim
sXaml = sXaml & " >" & sDelim
sXaml = sXaml & " <local:RightEditor Tag=""Collapsed""" & sDelim
sXaml = sXaml & " Amend=""{Binding Path=Item.Right0, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dg:DataGridRow}}}""" & sDelim
sXaml = sXaml & " Create=""{Binding Path=Item.Right1, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dg:DataGridRow}}}""" & sDelim
sXaml = sXaml & " Delete=""{Binding Path=Item.Right2, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dg:DataGridRow}}}""" & sDelim
sXaml = sXaml & " Review=""{Binding Path=Item.Right3, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dg:DataGridRow}}}""" & sDelim
sXaml = sXaml & " />" & sDelim
sXaml = sXaml & " </DataTemplate>"
Наконец, вы можете установить таблицу данных:
Dim oTemp As DataGridTemplateColumn = Nothing oTemp.CellTemplate = oDataTemplate