Я пишу элемент управления TwoWay Binding для ASP.NET. Наконец-то все заработало. Я перепривязываю, используя следующий код:
private void RebindData()
{
// return if the DataValue wasn't loaded from ViewState
if (DataValue == null)
return;
// extract the values from the two-way binding template
IOrderedDictionary values = new OrderedDictionary();
IBindableTemplate itemTemplate = DataTemplate as IBindableTemplate;
if (itemTemplate != null)
{
foreach (DictionaryEntry entry in itemTemplate.ExtractValues(this))
{
values[entry.Key] = entry.Value;
}
}
// use reflection to push the bound fields back to the datavalue
foreach(var key in values.Keys)
{
var type = typeof(T);
var pi = type.GetProperty(key.ToString());
if (pi != null)
{
pi.SetValue(DataValue, values[key], null);
}
}
}
Это работает для простых случаев, подобных этому:
<%# Bind("Name") %>
Техника отражения, которую я использую, не работает, когда у меня есть вложенный оператор связывания, подобный этому:
<%# Bind("Customer.Name") %>
Есть ли простой способ использовать отражение для таких вложенных свойств? Должен ли я использовать рекурсивную функцию для этого или просто цикл?