C# 是否可以使用实体框架和WPF DataGrid进行双向数据绑定?
我正在使用SQL CE、WPF、Entity framework 3.5sp2和iam开发POS应用程序,试图使用数据网格作为用户输入产品订单的订单输入控件。 我计划将此绑定到enitiy frmae工作模型,并寻找双向更新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())
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 }