【问题标题】:How to populate a foreign key field within an ItemsControl?如何在 ItemsControl 中填充外键字段?
【发布时间】:2016-08-12 23:26:31
【问题描述】:

我的数据库中有两个表。员工和照片。

Employee 持有一般员工凭证和一个名为 PictureId 的外键,它引用图片表。

Picture 表包含要在我的应用程序中使用的所有员工图像(以及其他一些其他图像)

所以在我的 WPF 应用程序中,我有一个带有自己 ViewModel 的 UserControl。 ViewModel 从数据库中获取员工信息(我使用的是 Entity-Framework 6 Database First 方法)。

public class MyViewModel
{
    private databaseEntities context;
    public List<employee> EmployeeList { get; set; }

    // Constructor
    public MyViewModel()
    {
        context = new databaseEntities();
        var queryEmployees = context.employees;
        EmployeeList = new List<employee>(queryEmployees);
    }
}

视图(用户控件)将这些信息排列成卡片。

<ItemsControl ItemsSource="{Binding EmployeeList}">
    <Grid...>
        <Image Source="/assets/images/CardBackground.PNG" Stretch="Fill" />
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top">
            <!-- How would I fetch the corresponding image data meant to go below? -->
            <Image Source="{Binding Path= ??, Converter={StaticResource PictureConverter}}"/>
            <TextBlock Text="{Binding FirstName}"/>
            <TextBlock Text="{Binding LastName}"/>
        </StackPanel>
    </Grid>
</ItemsControl>

这就是我的问题所在。我可以使用上面的代码从 Employee 表中检索信息。但是在获取他们的展示图片时,我遇到了难题。

我最初假设员工模型首先必须以与类加载基类相同的方式加载它的依赖项,但显然它并不完全以这种方式工作。

创建和填充单独的列表似乎也没有任何效果。

如何在同一个 ItemsControl 中加载外部表字段?

【问题讨论】:

    标签: c# mysql wpf entity-framework-6


    【解决方案1】:

    如果您使用的是 Entity FrameWork,那么 Employee 类中必须有导航属性。

    假设属性是 Picture 然后你可以做这样的事情。

    <ItemsControl ItemsSource="{Binding EmployeeList}">
        <Grid...>
            <Image Source="/assets/images/CardBackground.PNG" Stretch="Fill" />
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top">
                <!-- How would I fetch the corresponding image data meant to go below? -->
                <Image Source="{Binding Path=Employee.Picture.PicturePath, Converter={StaticResource PictureConverter}}"/>
                <TextBlock Text="{Binding FirstName}"/>
                <TextBlock Text="{Binding LastName}"/>
            </StackPanel>
        </Grid>
    </ItemsControl>
    

    我假设 Navigation 属性的名称和 Picture 实体的属性。请提供 Employee 类和 Picture 类的定义,以便我可以在需要时编辑我的答案,否则您将从上面的代码中知道该怎么做

    【讨论】:

    • 事实证明这很有效。有点...我可以确认 ItemsControl 绑定到必填字段。问题是请求的字段总是空的,因为引用的表(通过外键)从未填充过。知道该怎么做吗?
    • '问题是请求的字段总是空的,因为引用的表(通过外键)从未填充'。你能解释一下吗?我没听明白。
    • 在我的描述中,列表EmployeeList&lt;employee&gt; 填充在构造函数中。所以我的观点可以在员工表中传达信息。但是,未填充列表PuctureList&lt;picture&gt;。因此视图无法为相应的员工调出图片。我不确定我在那里是否有意义
    • 此描述不依赖于此 Window C# 代码中的任何其他列表。它取决于 Employee 的导航属性。请通过进入 Employee.cs 类来验证此处使用的导航属性实际上在此处命名为“图片”。还要在 Picture.cs 类中验证包含的字符串名为“PicturePath”。如果在此 xaml 代码中使用的两者不同,则在此处使用相同的。因为这一定是问题
    • 事实证明你是对的。你的解决方案奏效了。当涉及到导航属性时,我忽略了区分大小写。除此之外,您的图像源绑定有效。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2018-08-18
    • 2012-02-05
    相关资源
    最近更新 更多