双向绑定需要PATH或XPATH c#

本文关键字:XPATH PATH 绑定 | 更新日期: 2023-09-27 18:20:22

我正在尝试将数据库表绑定到DataGrid,这是我正在尝试绑定的表:

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

这是包含我试图绑定的表的数据库:

public partial class BDDInterneEntities : DbContext
{
    public BDDInterneEntities()
        : base("name=BDDInterneEntities")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    public DbSet<CapitalisationActuelle> CapitalisationActuelle { get; set; }
    public DbSet<DonneesDUMP> DonneesDUMP { get; set; }
    public DbSet<PMRQTOTMGPS> PMRQTOTMGPS { get; set; }
    public DbSet<Resultat> Resultat { get; set; }
}

这是我用来接收绑定数据的DataGrid:

<DataGrid x:Name="DonneesBrutes" ItemsSource="{Binding Path=ResultatCollection}" Margin="10,65,0,0" AutoGenerateColumns="False" EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="PMRQ" Width="*" Binding="{Binding XPath=TOTMPMRQ}" Header="PMRQ"></DataGridTextColumn>
                <DataGridTextColumn x:Name="LibellePMRQ" Width="*" Binding="{Binding XPath=LibelléTOTApres}" Header="Libellé PMRQ"></DataGridTextColumn>
                <DataGridTextColumn x:Name="Ligne" Width="*" Header="Ligne"></DataGridTextColumn>
                <DataGridTextColumn x:Name="OTM" Width="*" Header="OTM"></DataGridTextColumn>
                <DataGridTextColumn x:Name="TOTM" Width="*" Header="TOTM"></DataGridTextColumn>
                <DataGridTextColumn x:Name="LibelleTOTM" Width="*" Header="Libellé OTM"></DataGridTextColumn>
                <DataGridTextColumn x:Name="GA" Width="*" Header="GA"></DataGridTextColumn>
                <DataGridTextColumn x:Name="Discipline" Width="*" Header="Discipline"></DataGridTextColumn>
                <DataGridTextColumn x:Name="DisciplineSubstituee" Width="*" Header="Discipline Substituée"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>

我调用ViewModel来绑定数据,如下所示:

<Window.DataContext>
    <local:ViewModel/>
</Window.DataContext>

带本地:

xmlns:local="clr-namespace:WpfApplication3;assembly="

其中ViewModel是绑定的核心:

class ViewModel:INotifyPropertyChanged
{
    private BDDInterneEntities _BDDInterneEntities;
    public ViewModel()
    {
        _BDDInterneEntities = new BDDInterneEntities();
        ResultatCollection = new ObservableCollection<Resultat>(_BDDInterneEntities.Resultat);
    }         
    public ObservableCollection<Resultat> ResultatCollection { get; set; }
    public event PropertyChangedEventHandler PropertyChanged;
}

我对此有两个主要问题。我在Resultat中有一些测试数据。当我启动时,我看到了Datagrid的图形界面,如下所示:

结果数据网格:http://uprapide.com/image/831306-capture_9978

正如我们在这张图中看到的,DataGrid绑定"知道"我的表Resultat中有两行,但我们没有看到Datas。如果我想将数据插入DataGrid的任何情况,就会出现另一个问题。如果我尝试这样做,我会出现"双向绑定需要PATH或XPATH"错误。

希望我提供了足够的信息,听起来这是我的主要问题。。

如果有人知道我做错了什么?

第1版:

第二个问题解决了,我使用了XPATH,不应该使用。但第一个问题仍然存在。我没有在DataGrid中看到数据。。另一方面也是如此,如果我将数据写入Interface DataGrid,它们就不会写入DB。

双向绑定需要PATH或XPATH c#

这就是我必须做的,我终于找到了我想要的:

<DataGrid x:Name="DonneesBrutes" ItemsSource="{Binding Path=ResultatCollection}" Margin="10,65,0,0" AutoGenerateColumns="False" EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="PMRQ" Width="*" Binding="{Binding Path=TOTMPMRQ}" Header="PMRQ"></DataGridTextColumn>
                <DataGridTextColumn x:Name="LibellePMRQ" Width="*" Binding="{Binding Path=LibelléTOTApres}" Header="Libellé PMRQ"></DataGridTextColumn>

我的错误是在<DataGridTextColumn>上使用XPATH而不是PATH。然后,使用PATH=。对于双向绑定,效果同样好,听起来更有趣。