DTO オブジェクトの追加/編集コントロールを実装しようとしています。AddContainerView を作成しました。AddContainerView は、DTO の各フィールドのビューで構築されます。その目的は、追加/編集のステータスと進行状況を表示することです (たとえば、pic を参照)。
オレンジ = 現在のビュー
灰色 = 未試行
緑 = 有効なエントリ
赤 = 無効なエントリ
各フィールド ビューには、次のようなインターフェイス IAdd があります。
Field は関連付けられたフィールドの名前で、Value は値にバインドするプロパティです。
public interface IAdd
{
bool IsSelected
{
get;
set;
}
bool IsValid
{
get;
set;
}
bool Attempted
{
get;
set;
}
string Field
{
get;
set;
}
object Value
{
get;
set;
}
}
問題:
これらのビューにはそれぞれ独自のプロパティ (値) があるため、DTO を再作成するか、AddContainerView から参照される DTO を設定する必要があります。
質問: 静的変数やポインターを使用せずにこれを達成する最善の方法は何ですか?
更新: AddContainerView.xaml http://pastebin.com/Jf7XjyjR
AddContainerViewModel: http://pastebin.com/pM2Ye0qx
追加: http://pastebin.com/GZCU0j3z
更新 2 (考えられる解決策):
public void Save()
{
T tempObject = (T)Activator.CreateInstance(typeof(T));
Views.ToList().ForEach(v =>
{
var cv = (v as IAdd);
tempObject.GetType().GetField(cv.Field).SetValue(tempObject, cv.Value);
});
//Database update...
}