我有一个User表,我从Book表中得到了这个表的外键。 FK是ProxyResponsibleUser_ID。当我在DataGrid中使用DataGridTextColumn时,一切正常,但现在我想使用DataGridTemplateColumn从User表中为具有ProxyResponsibleUser_ID的相应用户显示FullName列。我得到一个错误,因为DataGridTemplateColumn没有Binding属性。
那么,DataGridTemplateColumn的哪个属性将绑定ProxyResponsibleUser_ID? 提前谢谢。
<DataGridTextColumn x:Name="securityConfigurationNameColumn" Binding="{Binding Path=SecurityConfigurationName}" Header="Security Configuration Name" Width="*" />
<DataGridTemplateColumn x:Name="proxyResponsibleUser_IDColumn" Binding="{Binding Path=ProxyResponsibleUser_ID}" Header="Proxy Responsible User ID" Width="*" >
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate DataType="{x:Type domain:User}">
<TextBlock Text="{Binding FullName}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
答案 0 :(得分:3)
我一直在努力解决这个问题,经过许多徒劳无功的搜索后,我想出了一个可以接受的替代品。
对于其他搜索此内容的人: 尝试创建DataGridBoundColumn的自定义实现。您只需要覆盖两个方法:GenerateElement和GenerateEditingElement。
示例:
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
Label element = new Label();
element.SetBinding(Label.ContentProperty, Binding);
return element;
}
用法:
<DataGrid>
<DataGrid.Columns>
<DataGridCustomColumn Binding="{Binding SomeProperty}" />
<DataGridCustomColumn Binding="{Binding OtherProperty}" />
</DataGrid.Columns>
</DataGrid>
虽然我原本打算使用模板,但我选择在代码隐藏中创建元素,因为我的需求相当简单;但是,在没有适当的DependencyProperty注册的情况下,我认为没有理由不适合使用DataTemplates。
答案 1 :(得分:1)
我没有看到你想要做什么,但Binding必须完全按照你已经完成的方式在TextBlock上完成。因此,DataGridTemplateColumn-Tag中的绑定是不必要的。该列无需知道记录的ID。
如果您想让TextBox控件可以使用id(通常不需要,因为您可以直接通过DataContext访问此属性),您可以通过绑定Tag-property来执行此操作。
<TextBlock Text="{Binding FullName}" Tag="{Binding ProxyResponsibleUser_ID}"/>
顺便说一下,你在EditTemplate中声明了一个TextBlock。也许你想要一个TextBox。或者您是否希望允许用户更改ID?如果是这样的话,请发表评论。
希望这会有所帮助。