Установить привязку для компонентов DataTemplate в коде

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

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

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

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

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

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

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


person Chouppy    schedule 02.03.2010    source источник


Ответы (1)


Шуппи

вы можете позволить 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
person klawusel    schedule 21.03.2010