首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定到DataGridTemplateColumn

绑定到DataGridTemplateColumn
EN

Stack Overflow用户
提问于 2010-09-01 18:52:45
回答 2查看 4.4K关注 0票数 1

我有一个用户表,并且有一个来自Book表的这个表的外键。FK是ProxyResponsibleUser_ID。当我在我的DataGrid中使用DataGridTextColumn时,一切正常,但是现在我想使用DataGridTemplateColumn来显示User表中的ProxyResponsibleUser_ID列。我得到一个错误,因为DataGridTemplateColumn没有绑定属性。

那么,我将通过DataGridTemplateColumn的哪个属性绑定ProxyResponsibleUser_ID呢?提前谢谢。

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2012-07-31 06:06:52

我已经在这个问题上挣扎了很长一段时间,经过多次无果的搜索,我想出了一个可以接受的替代品。

对于正在搜索此内容的其他任何人:尝试创建DataGridBoundColumn的自定义实现。您只需要覆盖两个方法: GenerateElement和GenerateEditingElement。

示例:

代码语言:javascript
复制
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
    Label element = new Label();
    element.SetBinding(Label.ContentProperty, Binding);

    return element;
}

用法:

代码语言:javascript
复制
<DataGrid>
    <DataGrid.Columns>
        <DataGridCustomColumn Binding="{Binding SomeProperty}" />
        <DataGridCustomColumn Binding="{Binding OtherProperty}" />
    </DataGrid.Columns>
</DataGrid>

虽然我最初打算使用模板,但我选择了在代码隐藏中创建元素,因为我的需求相当简单;然而,我看不出有什么理由不能在适当的DependencyProperty注册的情况下使用DataTemplates。

票数 4
EN

Stack Overflow用户

发布于 2010-09-01 19:08:17

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

如果你想让这个id对TextBox控件可用(通常不需要,因为你可以直接通过DataContext访问这个属性),你可以通过绑定标签属性来实现。

代码语言:javascript
复制
<TextBlock Text="{Binding FullName}" Tag="{Binding ProxyResponsibleUser_ID}"/> 

顺便说一下,您在EditTemplate中声明了一个TextBlock。也许你想要一台TextBox。或者,是否允许用户更改Id?如果是这种情况,请发表评论。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3617237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档