【问题标题】:Xaml DataGrid binding from database table来自数据库表的 Xaml DataGrid 绑定
【发布时间】:2014-08-28 08:10:24
【问题描述】:

我有一个由 xaml 代码生成的 Datagrid,如下所示:

<DataGrid Name="DonneesBrutes" ItemsSource="{Binding Resultat}" Margin="10,65,0,0" AutoGenerateColumns="True"  ></DataGrid>

我正在尝试将此绑定到我的数据库的一个表,名为 BDDInterne 的数据库和名为 Resultat 的表。我使用 Entity Framework 5 创建了这个数据库

我找到了房产

ItemsSource="{Binding ...}" 

但我只看到了在 xaml.cs 上创建的数据示例,而不是数据库中的表。

希望我提供了足够的信息。如果缺少某些内容,我当然可以更新我的帖子。

如果有人已经做过这种绑定,它可以帮助我。

提前致谢。

编辑1:

这是生成 Resultat 的代码:

public partial class Resultat
{
    public string NomTable { get; set; }
    public string Groupe_D_alerte { get; set; }
    public string NomChamp { get; set; }
    public string TOTMPMRQ { get; set; }
    public string SiModifie { get; set; }
    public string LibelléTOTAvant { get; set; }
    public string LibelléTOTApres { get; set; }
    public string Remarque { get; set; }
}

【问题讨论】:

  • 请分享生成/检索Resultat的代码
  • 如果您想直接链接到数据库,EntityFramework 是一种常见的方式:msdn.microsoft.com/en-us/data/jj574514.aspx
  • @Damascus 听起来我没有声明 DataContext,我想这是我的错误之一。
  • 应该是。确保检查 Visual Studio 的输出窗口,如果绑定失败信息将在那里
  • 如何查看这个输出窗口?我从来没有听说过这个。

标签: c# wpf xaml binding datagrid


【解决方案1】:

您不直接使用 EF 绑定到数据库。

我将如何处理它(使用 MVVM 模式):

  1. 我视图上的DataGrid 会将ItemsSource 绑定到我的视图模型上的一个属性,这将是类的集合,类似于ResultatCollection。该数据网格中的列将绑定到该类类型的属性。
  2. 我的 VM 将使用对使用 EntityFramework 的服务的调用来填充 ResultatCollection,并使用适合我要显示的内容的查询。对你来说,也许这就是一切。

在视图模型属性声明中:

private ObservableCollection<Resultat> _resultatCollection;
public ObservableCollection<Resultat> ResultatCollection
{
    get { return _resultatCollection; }
    set
    {
        if (value == _resultatCollection) return;
        _resultatCollection = value;
        RaisePropertyChanged(() => ResultatCollection);
    }
}

在 VM 中的某个时间点,我将调用返回数据的服务,然后当它返回数据时,我将使用结果填充我的集合,如下所示:

ResultatCollection = new ObservableCollection(loadOp.Entities);

是的,这一切都假设视图的 DataContext 是视图模型...

【讨论】:

  • 我在哪里写ResultatCollection = new ObservableCollection(loadOp.Entities);?如果我从public ObservableCollection&lt;Resultat&gt; ResultatCollection 中写出来,我有很多错误,如果我写进去,我有一个 get 或 set 访问器预期。另一方面,RaisePropertyChanged 在当前上下文中不存在。
  • 您调用您的服务(可能在您的 VM 的构造函数中,可能由用户操作驱动)。这通常是异步的。在从该异步返回中(或者如果您使用的是等待异步模式,您只需等待结果),您将获得结果。对我来说,这些结果作为带有 Entities 属性的 loadOp 返回(因为我使用 RIA 服务)。对你来说,它们可能是另一种形式。
  • 所以你不能只是复制粘贴我的代码,我把它作为几个关键点的例子来展示。在您回答了一些问题后,您需要根据自己的情况进行调整,例如 (a) 我如何获得结果 (b) 我是否使用 MVVM
  • 我终于成功了。你给了我非常有用的信息,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
相关资源
最近更新 更多