1

私はEntryクラスを持っています。これを介して、データを WPF の Gridview に公開します ( List<Entry>. オブジェクトのすべてのプロパティに対して Gridview に列が必要ですがEntry(のエントリごとに 1 つの列も取得します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);

これは可能ですか?これをどのように達成できますか、または望ましい結果を得るためにクラスの設計をどのように変更する必要がありますか?

4

2 に答える 2

1

これはうまくいくはずです

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*/}
}
于 2013-06-26T12:38:59.123 に答える
1

それは可能ですが、メリットが何であるかはわかりません.ラッパークラスを使用してそれを行うことができます..例:

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 などを使用してください...

于 2013-06-26T12:36:42.360 に答える