C# 未保存ObservableCollection编辑
我的ObservableCollection最终提取了数据,但现在它没有保存编辑 这是我的密码:C# 未保存ObservableCollection编辑,c#,linq,entity-framework,observablecollection,C#,Linq,Entity Framework,Observablecollection,我的ObservableCollection最终提取了数据,但现在它没有保存编辑 这是我的密码: public void FillDataGrid(Guid corporationId) { var query = from s in entity.Sources where s.CorporationId == corporationId select new SourceItem {
public void FillDataGrid(Guid corporationId)
{
var query = from s in entity.Sources
where s.CorporationId == corporationId
select new SourceItem
{
CorporationId = s.CorporationId,
Description = s.Description,
IsActive = s.IsActive,
Name = s.Name,
SourceId = s.SourceId,
TokenId = s.TokenId
};
SoureItemCollection = new ObservableCollection<SourceItem>(query);
SourceDataGrid.ItemsSource = SoureItemCollection;
SourceDataGrid.Columns[2].Visibility = Visibility.Hidden;
SourceDataGrid.Columns[0].IsReadOnly = true;
SourceDataGrid.Columns[1].IsReadOnly = true;
}
和保存:
private void Save_Click(object sender, RoutedEventArgs e)
{
entity.SaveChanges();
}
我是否要在保存之前将ObservableCollection绑定回实体?如果是这样,我该怎么做?您已经创建了数据的副本,并且正在编辑该副本。实体框架上下文完全不知道这一点 您可以使用实体数据对象,而不是使用
SourceItem
中的字段。例如:
var query = from s in entity.Sources
where s.CorporationId == corporationId
select new SourceItem(s);
class SourceItem
{
private SourceEntity _model;
public SourceItem(SourceEntity model)
{
_model = model;
}
public Guid CorporationId
{
get { return _mode.CorporationId; }
set
{
_model.CorporationId = value;
OnPropertyChanged(this, "CorporationId");
}
}
}
注意,这与
可观测采集无关。如果要从集合中添加或删除项目,还需要将其同步到实体模型。您可以使用CollectionChanged
事件进行此操作。请参见,问题在于表达式“var query=from s in entity.Sources..select new SourceItem{..}”没有检索附加到上下文(entity)的实体,但您创建了SourceItem类型的新对象,无法映射回db实体。
您应该做的是,您可能应该更改由entity.Sources对象直接支持的SourceItem类(我想应该是它的构造函数参数)。将SourceItem字段委托回相应的源字段(双向)。因此,SourceItem将封装Sources对象,并使用所有用于MVVM操作的WPF材料对其进行修饰。我让绑定只保存已经存在的记录。ObservableCollection的这一点是为了让添加和删除工作正常……我正在尝试实现这一点,但我在源项
方面遇到了问题。我不确定那到底是什么<代码>\u model
未扩展到所显示的基础字段。
var query = from s in entity.Sources
where s.CorporationId == corporationId
select new SourceItem(s);
class SourceItem
{
private SourceEntity _model;
public SourceItem(SourceEntity model)
{
_model = model;
}
public Guid CorporationId
{
get { return _mode.CorporationId; }
set
{
_model.CorporationId = value;
OnPropertyChanged(this, "CorporationId");
}
}
}