对不起,如果我不清楚的话,我的脑海里也不是很清楚(尤其是在试图找到其他帖子之后:p)
我愿意做的是在代码中创建DataGrids,包含一个按钮的零到多个列,它将调用一个相同的函数,但带有一个“参数”(每列不同)。
这是我到目前为止所得到的: DataGrid在代码中创建 在xaml资源中定义DataTemplate(带按钮) DataGridTemplateColumn使用上面的DataTemplate
是否可以将按钮的属性(在DataTemplate中)绑定到DataGridTemplateColumn属性(在我的情况下,列标题可以正常),以及如何?
有没有办法在代码中访问DataTemplate组件(例如按钮)并修改它们的属性?
在代码中创建DataTemplate是否可能(而且没有危险)?我在xaml中宣布了我的原因,因为我找到了一条建议这样做的帖子,而不是代码。
感谢您的帮助。
答案 0 :(得分:0)
Chouppy
你可以让XamlReader完成工作:
oDataTemplate = TryCast(System.Windows.Markup.XamlReader.Load(New System.Xml.XmlTextReader(New System.IO.StringReader(sXaml))), DataTemplate)
sXaml我可能会这样(在我的例子中,这是一个包含一些复选框的usercontrol,它们绑定到数据表字段):
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>"
最后,您可以设置datatemplate:
Dim oTemp As DataGridTemplateColumn = Nothing oTemp.CellTemplate = oDataTemplate