C# 是否可以使用实体框架和WPF DataGrid进行双向数据绑定?

C# 是否可以使用实体框架和WPF DataGrid进行双向数据绑定?,c#,wpf,entity-framework,entity,frame,C#,Wpf,Entity Framework,Entity,Frame,我正在使用SQL CE、WPF、Entity framework 3.5sp2和iam开发POS应用程序,试图使用数据网格作为用户输入产品订单的订单输入控件。 我计划将此绑定到enitiy frmae工作模型,并寻找双向更新 private void button1_Click(object sender, RoutedEventArgs e) { using (MasterEntities nwEntities = new MasterEntities())

我正在使用SQL CE、WPF、Entity framework 3.5sp2和iam开发POS应用程序,试图使用数据网格作为用户输入产品订单的订单输入控件。 我计划将此绑定到enitiy frmae工作模型,并寻找双向更新

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        using (MasterEntities nwEntities = new MasterEntities())
        {
          var users = from d in nwEntities.Companies
        select new CompanyRowModel{ CompanyId = d.CompanyId, CompanyName       d.CompanyName, Place = d.Place }

              listBox1.DataContext = users;
              dataGrid1.DataContext = users;
        }           
      }

      public class CompanyRowModel
      {
        public int CompanyId { get; set; }
        public string CompanyName { get; set; }
        public string Place{ get; set; }
      }
我的xaml编码是这样的

   <Grid>
     <ListBox Name="listBox1" ItemsSource="{Binding}"  />
    <Button Content="Show "  Name="button1" Click="button1_Click"  />

    <DataGrid AutoGenerateColumns="False" Name="dataGrid1" ItemsSource="{Binding}" >
      <DataGrid.Columns>
          <DataGridTextColumn Header=" ID"     Binding="{Binding CompanyId}"/>
          <DataGridTextColumn Header="Company Name"  Binding="{Binding CompanyName}"/>
          <DataGridTextColumn Header="Place"    Binding="{Binding Place}" />
        </DataGrid.Columns>
    </DataGrid>
    <Button Content="Save"  Name="button2" VerticalAlignment="Bottom" Click="button2_Click" />
</Grid>
是的,这是可能的


好的,在编辑之后

现在,您正在将选定的属性值存储在新的临时类CompanyDataRowModel中


这不是一个跟踪类。编写自己的自跟踪实体类或使用Company类

此代码有问题:

select new { d.CompanyId, d.CompanyName, d.Place }
这个匿名类中的属性是只读的,所以您应该用这些属性创建一个真正的类

public class CompanyRowModel
{
    public int CompanyId { get; set; }
    //...
}
//...
var users = from d in nwEntities.Companies
            select new CompanyRowModel{ CompanyId = d.CompanyId, CompanyName = d.CompanyName, Place = d.Place }

您可能对BookLibrary示例应用程序感兴趣。它还使用实体框架,SQL CE作为DB,它包含WPF DataGrid。

但我在执行此操作时出错,请帮助。.参见修改的问题我用特定示例更新了我的wuetion你能帮助我吗?我更改了如图所示的编码,在保存实体时出现了新错误,您能帮助我吗?您在CLR对象中进行了更改,而不是在实体中。将对象集合与实体集合同步。例如,使用事件行编辑结束并将CompanyRowModel对象的值复制到nwEntities.companys中的相关实体。它们由ID关联,因此请确保此列在DataGrid中是只读的。还有另一种方法:只写“var users=nwEntities.companys.ToList()”。但是,如果表中的字段较大,此解决方案将导致性能问题。
public class CompanyRowModel
{
    public int CompanyId { get; set; }
    //...
}
//...
var users = from d in nwEntities.Companies
            select new CompanyRowModel{ CompanyId = d.CompanyId, CompanyName = d.CompanyName, Place = d.Place }