数组属性的Get/Set方法
本文关键字:Set 方法 Get 属性 数组 | 更新日期: 2023-09-27 18:20:08
我有一个Entry
类,我想通过它将数据公开给WPF中的Gridview(通过List<Entry>
)。我需要在Gridview中为Entry
对象的每个属性设置一列(也为propsA3
的每个条目获取一列),但我不确定如何定义数组的getter/setter方法,以便始终获取/设置底层数据的属性。
public Entry
{
private ObjA oA;
private ObjB[] listB;
public int PropA1 {get {return oA.Prop1;} set {oA.Prop1 = value;}}
public int PropA2 {get {return oA.Prop2;} set {oA.Prop1 = value;}}
public int[] propsA3;
}
public ObjA
{
public int Prop1 {get, set};
public int Prop2 {get, set};
public int getVal3(ObjB b) {return calSomethin(b);}
public int setVal3(ref ObjB b, int val) { /*do something to ObjB*/}
}
public ObjB
{
Byte[] data;
}
我想要的PropsA3
具有以下获取/设置行为:
Entry e;
获取:int a = e.propsA3[i];
=>a = oA.getVal3(listB[i])
;
设置:e.propsA3[i] = 5;
=>oA.setVal3(listB[i], val)
;
这可能吗?如何实现这一点,或者我必须如何更改类设计才能获得期望的结果?
这是可能的,但我不确定它的好处是什么,你可以使用包装类来完成。。例如:
public class Entry
{
private ObjA oA;
private ObjB[] listB;
public int PropA1 {get {return {oA.Prop1}} set {oA.Prop1 = value;}}
public int PropA2 {get {return {oA.Prop2}} set {oA.Prop1 = value;}}
public EntryProperties propsA3;
public Entry()
{
propsA3 = new EntryProperties(this);
}
public class EntryProperties
{
private Entry _entry;
public EntryProperties(Entry entry) {
_entry = entry;
}
public int this[int index] {
get { return _entry.oA.getVal3(_entry.listB[index]); }
set { _entry.oA.setVal3(_entry.listB[index], value); }
}
}
}
话虽如此,我真的不认为这是一个好主意-为什么不在网格中定义一个具有所需属性的视图模型类,然后手动设置这些属性,或者使用AutoMapper或ValueInjector之类的工具来进行设置…
这应该能在中工作
pulbic Entry
{
public ObjA propsA3 { get; set; }
}
public ObjA
{
public int Prop1 {get, set};
public int Prop2 {get, set};
public int this[ObjB b]
{
get { return getVal(b); }
set { /* do something*/ }
}
private int getVal3(ObjB b) {return calSomethin(b);}
private int setVal3(ref ObjB b, int val) { /*do something to ObjB*/}
}