1

我有一个用户表,并且我有一个来自 Book 表的该表的外键。FK 是 ProxyResponsibleUser_ID。当我在 DataGrid 中使用 DataGridTextColumn 时,一切正常,但现在我想使用 DataGridTemplateColumn 为具有 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>
4

2 回答 2

4

我一直在为这个问题苦苦挣扎,经过多次无果而终的搜索,我想出了一个可以接受的替代品。

对于其他搜索此内容的人:尝试创建 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 一起使用。

于 2012-07-30T22:06:51.723 回答
0

我不知道您到底想做什么,但是必须像您已经做的那样在 TextBlock 上完成绑定。因此DataGridTemplateColumn-Tag 中的绑定是不必要的。列不需要知道记录的 id。

如果您想让文本框控件可以使用 id(通常不需要,因为您可以直接通过 DataContext 访问此属性),您可以通过绑定标记属性来实现此目的。

<TextBlock Text="{Binding FullName}" Tag="{Binding ProxyResponsibleUser_ID}"/> 

顺便说一句,您在 EditTemplate 中声明了一个 TextBlock。也许你想要一个文本框。还是您要允许用户更改 ID?如果是这种情况,请发表评论。

希望这可以帮助。

于 2010-09-01T11:08:16.550 回答