我發現使用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);
}
我不明白。你是否將視圖直接綁定到沒有中間模型的模型上?你從哪裏得到組合框的ItemsSource(例如)? –
組合框的所有值都由控制器生成。我通常在任何集合和'DataContext'之間放置一個'ICollectionView',這樣我就可以收到變化的通知並回復給控制器。 – thecoop