WPF如何像在ComboBox中一样在DataGrid的TextBlock中显示关系数据

塞达奇

在寻求有关此主题的帮助时,我通常会找到有关如何用相关数据填充ComboBox的信息(在一个表中显示源表中的外键的名称),但是我已经能够做到这一点。我正在寻找有关如何在TextBlock中实现相同结果的解决方案。

在我的项目中,我使用EntityFramework创建了到SQL数据库的链接。有两个表:人员和角色。它们与Personnel.RoleIdFk和Role.RoleId相关。

相关表

能够获得一个组合框,以显示关联的RoleIdFk的Role.RoleName。

组合框

在我的ViewModel中:

    private ICollection<Role> roleList;
    public ICollection<Role> RoleList
    {
        get { return roleList; }
        set { roleList = value; NotifyPropertyChanged("RoleList"); }
    }

    private Role selectedRole;
    public Role SelectedRole
    {
        get { return selectedRole; }
        set { selectedRole = value; NotifyPropertyChanged("SelectedRole"); }
    }

    public void SetSelectedRole()
    {
        if (SelectedPerson == null)
        {
            SelectedPerson = PersonnelList.Select(p => p)
                                          .FirstOrDefault();
        }


        SelectedRole = RoleList.Where(p => p.RoleId == SelectedPerson.RoleIdFk)
                                   .FirstOrDefault();
    }

以及ComboBoxXAML:

        <ComboBox x:Name="cboRole"
              Grid.Column="1" Grid.Row="0"
              Width="150" Height="35"
              ItemsSource="{Binding RoleList}"
              DisplayMemberPath="RoleName"
              SelectedItem="{Binding SelectedRole}"
              />

我的问题是我还在为人员表显示一个DataGrid。在此DataGrid中,我希望显示关联的RoleName而不是数字外键。DataGrid
当前的XAML:

<Window.DataContext>
    <viewModel:MainWindowVM />
</Window.DataContext>

    <ListView Name="lstPersonnel"
              Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1"
              ItemContainerStyle="{StaticResource ItemContStyle}"
              ItemsSource="{Binding PersonnelList}" >
        <ListView.View>
            <GridView>
                <GridViewColumn Width="75" Header="First Name" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding FirstName}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

                <GridViewColumn Width="75" Header="Last Name" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding LastName}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

                <GridViewColumn Width="75" Header="Role" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding RoleIdFk}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

这是网格的样子:

数据网格

对于最后一列,我尝试以各种方式更改文本字段。我也尝试过使用其他模板和样式。这些都没有成功。

有没有一种方法可以在XAML本身中实际执行此操作,还是我必须设置某种值转换器来完成此操作?

注意:我曾经考虑过使用某种“开关/案例”方案。尽管它在这里可以工作,但我需要找出一些可以更加动态化的东西。在项目的稍后部分,我将需要将PersonnelId与其他项目相关联。“切换/案例”方案对于300多个人员来说是不可行的。

维塔利·马克西莫夫(Vitaly Maximov)

“角色”应该在“人员”对象中可用。因此,您可以简单地使用“ Role.RoleName”而不是“ RoleIdFk”:

<TextBlock Text="{Binding Role.RoleName}" />

在没有引用对象的情况下,最好将两个集合连接起来并使用结果作为DataGrid的ItemsSource。这是一个示例:在一个数据网格中联接两个表usig Linq C#WPF

IMul​​tiValueConverter也有一个解决方案,但似乎过于复杂:使用多重绑定将2个集合连接到datagrid中

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何像在网页中一样在WPF中展开和折叠

来自分类Dev

如何像在Wysiwyg中一样在Quill中添加“显示html”按钮?

来自分类Dev

如何像在Vue中一样在Alpine.JS中添加显示过滤器?

来自分类Dev

如何像在CSV数据中一样在matplotlib中创建日期标记?

来自分类Dev

C#如何像在插槽(WPF)中一样使图像在Y轴上移动

来自分类Dev

像在Twitter App中一样显示相机胶卷?

来自分类Dev

像在iOS中一样滑动以在ListView中显示按钮

来自分类Dev

像在iOS中一样滑动以在ListView中显示按钮

来自分类Dev

是否可以像在SQL中一样将数据插入Hive中的表中?

来自分类Dev

是否可以像在SQL中一样将数据插入Hive中的表中?

来自分类Dev

如何像在 Windows 7 中一样删除图片元数据?

来自分类Dev

如何像在in sql语句中一样使用

来自分类Dev

如何使laravel路由像在WordPress中一样?

来自分类Dev

如何像在颤振中一样使用 tablelayout

来自分类Dev

如何像在 kivy 中一样进行支票?

来自分类Dev

像在Android中一样在Windows 10中清除应用程序数据

来自分类Dev

像在Safari中一样检查Firefox中的元素?

来自分类Dev

像在 Java 中一样访问 PHP 中的对象

来自分类Dev

像在jQuery中一样如何在AgularJS中触发事件?

来自分类Dev

如何像在Eclipse中一样在Android Studio中复制错误

来自分类Dev

内容占位符如何像在Facebook中一样在Android RecyclerView中实现?

来自分类Dev

如何像在mysql中一样在PostgreSQL中列出其引用的所有列?

来自分类Dev

如何像在autohotkey中一样在python中编程hotstrings

来自分类Dev

像在Matlab中的Simulink中一样,如何在mfile中进行集成?

来自分类Dev

如何像在struts2中一样在烧瓶上添加拦截器

来自分类Dev

如何像在Objective-C中一样在Swift中定义块?

来自分类Dev

像在JQuery中一样,如何在AngularJS中获得高度?

来自分类Dev

内容占位符如何像在Facebook中一样在Android RecyclerView中实现?

来自分类Dev

如何像在vim中一样在整个OS中重新映射字符?

Related 相关文章

  1. 1

    如何像在网页中一样在WPF中展开和折叠

  2. 2

    如何像在Wysiwyg中一样在Quill中添加“显示html”按钮?

  3. 3

    如何像在Vue中一样在Alpine.JS中添加显示过滤器?

  4. 4

    如何像在CSV数据中一样在matplotlib中创建日期标记?

  5. 5

    C#如何像在插槽(WPF)中一样使图像在Y轴上移动

  6. 6

    像在Twitter App中一样显示相机胶卷?

  7. 7

    像在iOS中一样滑动以在ListView中显示按钮

  8. 8

    像在iOS中一样滑动以在ListView中显示按钮

  9. 9

    是否可以像在SQL中一样将数据插入Hive中的表中?

  10. 10

    是否可以像在SQL中一样将数据插入Hive中的表中?

  11. 11

    如何像在 Windows 7 中一样删除图片元数据?

  12. 12

    如何像在in sql语句中一样使用

  13. 13

    如何使laravel路由像在WordPress中一样?

  14. 14

    如何像在颤振中一样使用 tablelayout

  15. 15

    如何像在 kivy 中一样进行支票?

  16. 16

    像在Android中一样在Windows 10中清除应用程序数据

  17. 17

    像在Safari中一样检查Firefox中的元素?

  18. 18

    像在 Java 中一样访问 PHP 中的对象

  19. 19

    像在jQuery中一样如何在AgularJS中触发事件?

  20. 20

    如何像在Eclipse中一样在Android Studio中复制错误

  21. 21

    内容占位符如何像在Facebook中一样在Android RecyclerView中实现?

  22. 22

    如何像在mysql中一样在PostgreSQL中列出其引用的所有列?

  23. 23

    如何像在autohotkey中一样在python中编程hotstrings

  24. 24

    像在Matlab中的Simulink中一样,如何在mfile中进行集成?

  25. 25

    如何像在struts2中一样在烧瓶上添加拦截器

  26. 26

    如何像在Objective-C中一样在Swift中定义块?

  27. 27

    像在JQuery中一样,如何在AngularJS中获得高度?

  28. 28

    内容占位符如何像在Facebook中一样在Android RecyclerView中实现?

  29. 29

    如何像在vim中一样在整个OS中重新映射字符?

热门标签

归档