Ho appena risposto a una domanda over here dove ho detto che non v'è alcuna differenza funzionale traCosa fa il flag PathGeneratedInternally in un binding WPF?
e
{Binding Path=TargetProperty}
e, per quanto a mia conoscenza quello che ho scritto è fondamentalmente corretta. Tuttavia l'idea che si utilizzerà il costruttore e l'altro imposta la proprietà mi ha fatto pensare che ci potrebbe essere una differenza, quindi ho aperto il riflettore aperto e ho dato un'occhiata.
Il costruttore ha il seguente codice in esso:
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 proprietà percorso è questo:
public PropertyPath Path
{
get
{
return this._ppath;
}
set
{
base.CheckSealed();
this._ppath = value;
this._attachedPropertiesInPath = -1;
base.ClearFlag(BindingBase.BindingFlags.PathGeneratedInternally);
}
}
Così, quando si imposta il percorso attraverso la proprietà la bandiera PathGeneratedInternally viene cancellato. Ora, questo flag non è esposto da nessuna parte direttamente al pubblico, ma sembra per essere utilizzato in alcuni posti:
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));
}
Sono sicuro che è tutto abbastanza irrilevante, ma qualcuno là fuori sa che cosa questo significa bandiera e perché potrebbe essere diverso a seconda di come si dichiara l'associazione?
Quindi c'è una differenza funzionale? –
@ UriAbramson - No – CodeNaked