我想通过Converter将readonly DataGrid的一些列数据绑定到Entity的Association属性(将此关联属性的集合转换为string)。当我尝试从集合中添加/删除元素时,绑定不会触发。 PropertyChanged也不涨。
contractPosition.PropertyChanged += (s, e2) =>
{
a = 0;//don't fire
};
contractPosition.ContractToOrderLinks.Remove(link);
这是contractPosition实体的片段(由EF4生成):
[Association("ContractPosition_ContractToOrderLink", "PositionId", "ContractPositionId")]
[XmlIgnore()]
public EntityCollection<ContractToOrderLink> ContractToOrderLinks
{
get
{
if ((this._contractToOrderLinks == null))
{
this._contractToOrderLinks = new EntityCollection<ContractToOrderLink>(this, "ContractToOrderLinks", this.FilterContractToOrderLinks, this.AttachContractToOrderLinks, this.DetachContractToOrderLinks);
}
return this._contractToOrderLinks;
}
}
为什么PropertyChanged不上升?如何实现绑定刷新?
答案 0 :(得分:1)
有几个不同的事件要听:
INotifyPropertyChanged.PropertyChanged
_contractToOrderLinks
的值发生变化时触发。在示例代码中,值从不更改,事件从不调用,事件从不触发。
INotifyCollectionChanged.CollectionChanged
添加对象,删除对象以及清除集合时触发。
EntityCollection<>.EntityAdded
添加对象时触发。
EntityCollection<>.EntityRemoved
删除对象时触发。 我不确定在收集清单时是否会为每个实体触发。
我更喜欢使用INotifyCollectionChanged.CollectionChanged
事件。但是,EntityCollection<>
显式实现了接口,因此您必须先将其强制转换。试试这个:
((INotifyCollectionChanged)contractPosition.ContractToOrderLinks).CollectionChanged += (s, e) =>
{
a = 0; //does fire
};
contractPosition.ContractToOrderLinks.Remove(link);