を使用して解決策を見つけましたExpandoObject
-読み取り専用モデルオブジェクトが与えられた場合、これは実行時に読み取り/書き込みモデルを生成し、プロパティが変更されるたびにコントローラーメソッドを呼び出します:
public static dynamic GetAdapterFor(IController controller, object modelObj)
{
if (modelObj == null)
return null;
ExpandoObject obj = new ExpandoObject();
// add all the properties in the model
foreach (var prop in modelObj.GetType().GetProperties())
{
((IDictionary<string, object>)obj).Add(prop.Name, prop.GetValue(modelObj, null));
}
// add the handler to update the controller when a property changes
((INotifyPropertyChanged)obj).PropertyChanged += (s, e) => UpdateController(controller, e.PropertyName, ((IDictionary<string, object>)s)[e.PropertyName]);
return obj;
}
private static void UpdateController(IController controller, string propertyName, object propertyValue)
{
controller.SetPropertyValue(propertyName, propertyValue);
}