7
avril
2007
Un exemple de C# 3.0
avril
2007
Dans mon article sur le DataBinding avancé, j’utilisais la méthode suivante :
private Control FindBoundControl(object dataSource, string propertyName)
{
if (BindingContext[dataSource] == null)
return null;
foreach (Binding binding in BindingContext[dataSource].Bindings)
if (binding.BindingMemberInfo.BindingField == propertyName)
return binding.Control;
return null;
}
{
if (BindingContext[dataSource] == null)
return null;
foreach (Binding binding in BindingContext[dataSource].Bindings)
if (binding.BindingMemberInfo.BindingField == propertyName)
return binding.Control;
return null;
}
En utilisant C# 3.0, je fais plutôt ceci :
public static class BindingContextExtensionMethods
{
public static Control FindControl(this BindingContext bindingContext, object dataSource, string propertyName)
{
if (bindingContext[dataSource] == null)
return null;
return bindingContext[dataSource].FindControl(propertyName);
}
public static Control FindControl(this BindingManagerBase bindingManager, string propertyName)
{
IEnumerable<Control> controls =
from Binding binding in bindingManager.Bindings
where binding.BindingMemberInfo.BindingField == propertyName
select binding.Control;
if (controls.Count() == 0)
return null;
return controls.First();
}
}
{
public static Control FindControl(this BindingContext bindingContext, object dataSource, string propertyName)
{
if (bindingContext[dataSource] == null)
return null;
return bindingContext[dataSource].FindControl(propertyName);
}
public static Control FindControl(this BindingManagerBase bindingManager, string propertyName)
{
IEnumerable<Control> controls =
from Binding binding in bindingManager.Bindings
where binding.BindingMemberInfo.BindingField == propertyName
select binding.Control;
if (controls.Count() == 0)
return null;
return controls.First();
}
}
C’est peut-être un peu plus long mais c’est plus facilement réutilisable et ça offre l’avantage des extension methods. Dans ma Form, il me suffit d’appeler ma méthode FindControl comme ceci :
Control c = BindingContext.FindControl(sender, e.PropertyName);