从DataGrid绑定中的Id获取查找值

时间:2013-09-04 15:38:37

标签: c# wpf xaml binding

我有一种情况,在下面的课程中将解释

public class UserDetail
{
    public string UserCode{get; set;}
    public uint RoleId{get; set;}
    public uint GroupId{get; set;}
}

和班级

public class UserRoleDetail
{
    public uint RoleId{get; set;}
    public string RoleName{get; set;}
}

我有一个数据网格,并将datacontext绑定到UserDetail对象的集合。

            <DataGrid x:Name="usersgrid"
                      AlternatingRowBackground="LightBlue"
                      CanUserAddRows="False"
                      CanUserDeleteRows="False"
                      CanUserReorderColumns="True"
                      ItemsSource="{Binding}"
                      CanUserResizeColumns="True"
                      AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="User Code"
                                        Binding="{Binding Path=UserCode}"/>
                    <DataGridTextColumn Header="Role"
                                        Binding="{Binding Path=RoleId}">
                        <!-- Need to get the RoleName by looking up RoleDetails collection-->
                    </DataGridTextColumn>
                    <DataGridTextColumn Header="Group"
                                        Binding="{Binding Path=GroupId}"/>
                </DataGrid.Columns>
            </DataGrid>

输出显示UserDetail类中的整数RoleId字段。我希望通过在后面的代码中的RoleDetails集合中查找RoleId来将其显示为RoleName。

我有什么方法可以在xaml中实现这一点。使用转换器的任何亮点??

提前致谢。

1 个答案:

答案 0 :(得分:0)

我的建议是创建一个包装类,让我们说UserDetailWrapper包含UserDetailInstance和UserRoleDetailInstance这样

    public class UserDetailWrapper
    {
        public UserDetail UserDetail
        {
            get;
            set;
        }

        public UserRoleDetail UserRoleDetail { get; set; }
    }

在您的代码中,为UserDetail集合生成U​​serDetailWrapper列表,并将UserRoleDetail设置为与roleID相对应。

现在将此集合作为ItemsSource绑定到DataGrid。

您必须相应地更新绑定,如

<DataGridTextColumn Header="User Code"
                                        Binding="{Binding Path=UserDetail.UserCode}"/>

然后对于UserRoleDetailName你可以直接做

<DataGridTextColumn Header="Role"
                                        Binding="{Binding Path=UserRoleDetail.RoleName}">