Установить привязку для компонентов DataTemplate в коде - PullRequest
0 голосов
/ 02 марта 2010

извините, если мне непонятно, в моей голове тоже не очень ясно (особенно после попытки найти свой путь в других постах: p)

То, что я готов сделать, - это создание DataGrids в коде, с нуля до множества столбцов, содержащих кнопку, которая будет вызывать одну и ту же функцию, но с «параметром» (разным для каждого столбца).

Вот что я получил до сих пор: DataGrid создан в коде DataTemplate, определенный в ресурсах xaml (с кнопкой) DataGridTemplateColumn, который использует вышеупомянутый DataTemplate

Можно ли привязать свойства кнопки (в DataTemplate), свойства DataGridTemplateColumn (в моем случае заголовок столбца будет в порядке) и как?

Есть ли способ получить доступ к компонентам DataTemplate (например, к кнопке) в коде и изменить их свойства?

Можно ли (и не опасно) создавать шаблон данных в коде? Я объявил свой в xaml, потому что я нашел пост, советующий сделать это вместо кода.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 21 марта 2010

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
...