Установить привязку для компонентов 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
Другие вопросы по тегам