C# 在ICollection中绑定附加元素<;模型>;不破坏EF EDMX
我无法使用C# 在ICollection中绑定附加元素<;模型>;不破坏EF EDMX,c#,wpf,mvvm,entity-framework-6,C#,Wpf,Mvvm,Entity Framework 6,我无法使用MVVM方法将数据绑定到DataGrid。也许很傻,但我被卡住了。 我有一个EF6表EFTable,看起来像这样 在我的视图模型中,我有 public ICollection<EFTable> EFTableToBindWithDataGrid { get { return efTable; } set { efTable = value; RaisePro
MVVM
方法将数据绑定到DataGrid
。也许很傻,但我被卡住了。
我有一个EF6表
EFTable
,看起来像这样
在我的视图模型中,我有
public ICollection<EFTable> EFTableToBindWithDataGrid
{
get
{
return efTable;
}
set
{
efTable = value;
RaisePropertyChanged("EFTableToBindWithDataGrid");
}
}
公共ICollection EFTableToBindWithDataGrid
{
收到
{
返回efTable;
}
设置
{
efTable=数值;
RaisePropertyChanged(“EFTableToBindWithDataGrid”);
}
}
最后,在我看来(xaml),我有了一个DataGrid
<DataGrid ColumnWidth="*" AutoGenerateColumns="False" ItemsSource="{ Binding Path=EFTableToBindWithDataGrid,Mode=OneWay}" >
<DataGrid.Columns>
<DataGridTextColumn Header="Col1" Binding="{Binding Col1}"/>
<DataGridTextColumn Header="Col2" Binding="{Binding Col2}" />
<!--................-->
<!--#####HERE-->
<DataGridTextColumn Header="ColNotInEFTable" Binding="{Binding ColNotInEFTable}" />
</DataGrid.Columns>
</DataGrid>
让我陈述我的问题
ColNotInEFTable
,但它们不在EFTableToBindWithDataGrid
(因为EFTable
没有ColNotInEFTable
字段)提前感谢从您的
模型
创建一个视图模型
public class ViewModelInvoiceProduct : INotifyPropertyChanged
{
//only the properties in Model that you want to show in DataGrid
//your additional property
private int _CGST;
public int CGST
{
get
{
return _CGST;
}
set
{
_CGST = value;
RaisePropertyChanged("CGST");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
VIEWMODEL:并将AddedInvoiceProductsViewModel
绑定到您的DataGrid
public ICollection<ViewModelInvoiceProduct> AddedInvoiceProductsViewModel {get;set;}
public ICollection<InvoiceProducts> AddedInvoiceProducts
{
get
{
return invoiceProducts;
}
set
{
invoiceProducts = value;
//the idea to populate AddedInvoiceProductsViewModel
foreach(var invoice in invoiceProducts)
{
var temp = new ViewModelInvoiceProduct();
temp.XXX = invoice.XXX;
temp.CGST = 1 + 2;
AddedInvoiceProductsViewModel.Add(temp);
}
}
}
public ICollection AddedInvoiceProductsViewModel{get;set;}
公共ICollection附加语音产品
{
收到
{
退货产品;
}
设置
{
发票产品=价值;
//填充AddedInvoiceProductsViewModel的想法
foreach(发票产品中的var发票)
{
var temp=新的ViewModelInvoiceProduct();
温度XXX=发票XXX;
温度CGST=1+2;
AddedInvoiceProductsViewModel.Add(临时);
}
}
}
计算值CGST和SGST,但它们不在AddedInvoiceProducts中
。你不认为这些代码应该是其中的一部分吗?这只是一个例子。好的,太好了。回答您的问题(“是否有其他方法解决此问题?”):是的,我已使用一个通用示例更新了此问题。当我通过dataContext.saveChanges()
method更新数据库时,此方法是否会导致任何问题?EF EDMX文件中未映射新的计算属性(映射)。我认为dataContext.saveChanges()应该可以很好地工作谢谢,我会检查tooInvoiceProducts,其想法是创建一个从模型克隆的列表视图模型
public ICollection<ViewModelInvoiceProduct> AddedInvoiceProductsViewModel {get;set;}
public ICollection<InvoiceProducts> AddedInvoiceProducts
{
get
{
return invoiceProducts;
}
set
{
invoiceProducts = value;
//the idea to populate AddedInvoiceProductsViewModel
foreach(var invoice in invoiceProducts)
{
var temp = new ViewModelInvoiceProduct();
temp.XXX = invoice.XXX;
temp.CGST = 1 + 2;
AddedInvoiceProductsViewModel.Add(temp);
}
}
}