0

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

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;}
}

我有一个数据网格并将数据上下文绑定到 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 本身中实现这一点。任何关于使用转换器的说明?

提前致谢。

4

1 回答 1

0

我的建议是创建一个包装类,比如说 UserDetailWrapper,其中包含这样的 UserDetailInstance 和 UserRoleDetailInstance

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

        public UserRoleDetail UserRoleDetail { get; set; }
    }

在您后面的代码中,为 UserDetail 集合生成 UserDetailWrapper 列表,并将 UserRoleDetail 设置为对应于 roleID。

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

您将不得不相应地更新您的绑定,例如

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

然后对于 UserRoleDetailName 你可以直接做

<DataGridTextColumn Header="Role"
                                        Binding="{Binding Path=UserRoleDetail.RoleName}">
于 2013-09-04T15:52:30.137 回答