Question

Binding.Mode , lors de la sélection par défaut, cela dépend de la propriété étant binded.

Je cherche une liste ou d'une convention ou d'information pour les valeurs par défaut pour les différents contrôles.
Je veux dire, les propriétés sont TwoWay par défaut et ainsi de suite. Tous les liens, les idées, les pensées et même coups de gueule sont welcommed!

Était-ce utile?

La solution

  

Tout comme UpdateSourceTrigger, la   valeur par défaut pour la propriété Mode   varie pour chaque propriété.   propriétés modifiables utilisateur telles que   TextBox.Text, ComboBox.Text,   MenuItem.IsChecked, etc, ont TwoWay   comme leur valeur de mode par défaut. à la figure   si la valeur par défaut est TwoWay, regardez   la dépendance Informations sur la propriété   section de la propriété. Si elle dit   BindsTwoWayByDefault est définie sur true,   la valeur du mode par défaut du   la propriété est TwoWay. Pour le faire   programme, obtenir la propriété   métadonnées de la propriété en appelant   GetMetadata puis vérifiez la valeur booléenne   La valeur de la BindsTwoWayByDefault   propriété.

Source: https://web.archive.org/web/20100209025938/http://blogs.msdn.com/wpfsdk/archive/2006/10/19/wpf-basic -data de liaison-faq.aspx

La meilleure façon serait de toujours explicite ce genre de mode de liaison que vous voulez à partir d'une reliure.

Autres conseils

Voici une façon de trouver le mode par défaut pris en charge par un DP -

  

NET Reflector est votre ami. Avec réflecteur, recherchez et TextBox   regarder la source pour le constructeur statique (.cctor()). Ici vous   sera en mesure de trouver le code utilisé pour l'enregistrement du TextProperty   DP:

TextProperty = DependencyProperty.Register
               (
                   "Text", 
                   typeof(string), 
                   typeof(TextBox), 
                   new FrameworkPropertyMetadata
                   (
                      string.Empty, 
                      FrameworkPropertyMetadataOptions.Journal |
                      FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
                      new PropertyChangedCallback(TextBox.OnTextPropertyChanged), 
                      new CoerceValueCallback(TextBox.CoerceText), 
                      true, 
                      UpdateSourceTrigger.LostFocus
                   )
                );
     

Notez qu'un paramètre est transmis à la méthode registre indiquant   le mode par défaut Reliure:   FrameworkPropertyMetadataOptions.BindsTwoWayByDefault. Si tu utilises   réflecteur à regarder l'enregistrement de texte de TextBlock DP,   verra qu'une telle valeur est passée, dans ce cas, nous supposons que la   liaison est une façon par défaut.

Taken de poste de Bea Stollnitz: Comment puis-je mettre à jour une explicite contraignante dans un modèle

Bien qu'ayant une sorte de liste des importants PDD serait très utile.

CHERCHAIT une liste aussi bien, la plupart du temps pour savoir quelles liaisons pourraient être réglées sur un moyen d'améliorer les performances. Les fonctions suivantes peuvent vous aider à trouver qui contrôle utiliser la liaison bidirectionnelle 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;
}

En utilisant 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}");
    }
}

résultat de l'échantillon (propriétés de contrôle avec deux voies de 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

Il est intéressant, la plupart des contrôles ont une propriété TextSearch qui a deux voies de liaison.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top