具体场景:
datagrid的行中有个combox
每个行是一个实例A
每个行中的SelectedItem是实例A的一个属性B
我希望实现datagrid的复制Command,具体做法是A序列化反序列化成一个新的对象A_Copy,再SelectedItem=A_Copy
出现问题:A_Copy这行的Combox始终没有选择项
原因:A中的属性B是Combox的集合中的一项,而A_Copy是新的对象,一个新的内存空间,A_Copy的B_Copy属性也是新的空间,并不属于Combox集合项,所以显示不出来
解决办法:
1 A_Copy.B=ComboxShource.Where(t=>t.somePorperty.equals(A_Copy.B.SomeProperty))
指定成集合中的一项
2 public override equal(object obj)
{
if(this.someproperty==obj,someProperty)
{
return true;
}
return false;
}
在B类中重写Equal方法,这样找的时候就不是按照引用对象的内存地址来判断是否在集合中了
这个问题困扰了我半天,还是关于值对象和引用对象的基本知识不过关(微软封装得太好了,轻易察觉不到哇o(╥﹏╥)o)