Estaba buscando una lista también, sobre todo para averiguar qué enlaces se pueden establecer en una sola dirección para mejorar el rendimiento.Las siguientes funciones pueden ayudar a encontrar la que controla el uso de dos vías de enlace por defecto:
public IList<DependencyProperty> GetAttachedProperties(DependencyObject obj)
{
var result = new List<DependencyProperty>();
foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(obj, new Attribute[] { new PropertyFilterAttribute(PropertyFilterOptions.Valid) }))
{
var dpd = DependencyPropertyDescriptor.FromProperty(pd);
if (dpd != null)
{
result.Add(dpd.DependencyProperty);
}
}
return result;
}
public bool IsBindsTwoWayByDefault(DependencyObject obj, DependencyProperty property)
{
var metadata = property.GetMetadata(obj) as FrameworkPropertyMetadata;
if (metadata != null)
{
return metadata.BindsTwoWayByDefault;
}
return false;
}
Utilizando una función de impresión, nos da una lista:
var objList = new List<DependencyObject> { new TextBox(), new TextBlock(), new Label(), new ComboBox(), new Button() };
foreach (var obj in objList)
{
var props = GetAttachedProperties(obj);
foreach (var prop in props)
{
if(IsBindsTwoWayByDefault(obj, prop))
Debug.WriteLine($"{obj} : {prop.OwnerType}:{prop.Name}");
}
}
resultado de la muestra (propiedades de control de dos vías vinculante por defecto)
System.Windows.Controls.TextBox : System.Windows.Controls.TextBox:Text
System.Windows.Controls.TextBox : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.TextBlock : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.Label : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.ComboBox:IsDropDownOpen
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.ComboBox:Text
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedIndex
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedItem
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedValue
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.Button : System.Windows.Controls.TextSearch:Text
Curiosamente, la mayoría de los controles tienen una propiedad TextSearch que tiene dos vías de unión.
¿Hay algún lugar donde pueda encontrar una lista de todas las propiedades y sus valores predeterminados de BindingMode? ¿cuales son las normas? – Shimmy
La lista de propiedades es interminable. Supongo que http://msdn.microsoft.com enumera la mayoría de los de Microsoft. No veo ninguna información y el modo de enlace allí, así que supongo que tendrías que averiguarlo por ti mismo. La URL que di en mi respuesta explica cómo encontrarlos –
¿Qué sucede con las propiedades de dependencia cuyos metadatos son UIPropertyMetadata en lugar de FrameworkPropertyMetadata? Los documentos de MSDN para tales propiedades no mencionan BindsTwoWayByDefault ya que ese booleano no existe en UIPropertyMetadata. – HappyNomad