he acaba de responder una pregunta over here donde dije que no hay diferencia funcional entre¿Qué hace el indicador PathGeneratedInternally en un enlace WPF?
y
{Binding Path=TargetProperty}
y, por lo que yo soy consciente de lo que he escrito es fundamentalmente correcto. Sin embargo, la idea de que uno use el constructor y el otro establece la propiedad me hizo pensar que hay podría ser, así que abrí el reflector y eché un vistazo.
El constructor tiene el siguiente código en él:
public Binding(string path)
{
this._source = UnsetSource;
if (path != null)
{
if (Dispatcher.CurrentDispatcher == null)
{
throw new InvalidOperationException();
}
this._ppath = new PropertyPath(path, new object[0]);
this._attachedPropertiesInPath = -1;
}
}
La propiedad ruta es la siguiente:
public PropertyPath Path
{
get
{
return this._ppath;
}
set
{
base.CheckSealed();
this._ppath = value;
this._attachedPropertiesInPath = -1;
base.ClearFlag(BindingBase.BindingFlags.PathGeneratedInternally);
}
}
Así que cuando se establece el camino a través de la propiedad de la bandera PathGeneratedInternally se borra. Ahora, esta bandera no está expuesto públicamente en cualquier lugar directamente, pero sí parece que se utilizará en algunos lugares:
internal void UsePath(PropertyPath path)
{
this._ppath = path;
base.SetFlag(BindingBase.BindingFlags.PathGeneratedInternally);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializePath()
{
return ((this._ppath != null) && !base.TestFlag(BindingBase.BindingFlags.PathGeneratedInternally));
}
Estoy seguro de que todo bastante intrascendente, pero ¿alguien por ahí sabe lo que esto significa bandera y por qué tal vez sea diferente dependiendo de cómo declaras el enlace?
Entonces, ¿hay una diferencia funcional? –
@UriAbramson - Nope – CodeNaked