Je cherchais également une liste, principalement pour savoir quelles liaisons pouvaient être réglées sur un sens pour améliorer les performances.Les fonctions suivantes peuvent vous aider à trouver qui contrôle utiliser deux voies de liaison par défaut:
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;
}
l'aide d'une fonction d'impression, nous donne une liste:
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}");
}
}
Exemple de résultat (propriétés de contrôle avec deux voies la liaison par défaut)
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
Fait intéressant, la plupart des contrôles ont une propriété TextSearch qui a deux voies de liaison.
Existe-t-il un endroit où je peux trouver une liste de toutes les propriétés et leurs valeurs par défaut BindingMode? quelles sont les règles? – Shimmy
La liste des propriétés est infinie. Je suppose que http://msdn.microsoft.com liste la plupart de ceux de Microsoft. Je ne vois aucune information et le mode de liaison là-bas, donc je suppose que vous auriez à le découvrir par vous-même. L'url que j'ai donné dans ma réponse explique comment les trouver –
Qu'en est-il des propriétés de dépendance dont les métadonnées sont UIPropertyMetadata plutôt que FrameworkPropertyMetadata? Les documents MSDN pour ces propriétés ne mentionnent pas BindsTwoWayByDefault car ce booléen n'existe pas sur UIPropertyMetadata. – HappyNomad