Pregunta

Binding.Mode , al seleccionar por defecto , que depende de la propiedad que se enganchan.

Busco a alguna lista o alguna convención o cualquier información de los valores predeterminados para los distintos controles.
Es decir, qué propiedades son TwoWay por defecto y así sucesivamente. Cualquier enlace, ideas, pensamientos y diatribas incluso se welcommed!

¿Fue útil?

Solución

  

Al igual que en UpdateSourceTrigger, la   valor predeterminado de la propiedad Modo   varía para cada propiedad.   Las propiedades de usuario-editable tales como   TextBox.Text, ComboBox.Text,   MenuItem.IsChecked, etc, tienen TwoWay   como su valor de modo predeterminado. la figura   si el defecto es TwoWay, ver   la Dependencia Información del hotel   sección de la propiedad. Si dice   BindsTwoWayByDefault se establece en true,   entonces el valor por defecto del Modo   propiedad es TwoWay. Para hacerlo   programación, obtener la propiedad   metadatos de la propiedad llamando   GetMetadata y después comprobar el booleano   valor de la BindsTwoWayByDefault   propiedad.

Fuente: https://web.archive.org/web/20100209025938/http://blogs.msdn.com/wpfsdk/archive/2006/10/19/wpf-basic -Datos de unión-faq.aspx

La forma más segura sería estar siempre explícita qué tipo de modo de unión que quiere de una unión.

Otros consejos

Esta es una manera de encontrar el modo por defecto con el apoyo de un DP -

  

.NET Reflector es su amigo. Con reflector, buscar y TextBox   mirar a la fuente para el constructor estático (.cctor()). Tu aquí   será capaz de encontrar el código utilizado para registrar la 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
                   )
                );
     

Tenga en cuenta que un parámetro se pasa al método de registro que indique   el modo de unión por defecto:   FrameworkPropertyMetadataOptions.BindsTwoWayByDefault. Si utiliza   reflector para mirar el registro para el texto de TextBlock DP se   veremos que pasa hay tal valor, en cuyo caso se asume la   unión es una forma predeterminada.

Tomado del puesto de Bea Stollnitz: ¿Cómo puedo actualizar una unión explícita dentro de una plantilla

A pesar de tener algún tipo de lista de instrucciones importantes de DP sería muy útil.

Estaba buscando una lista así, sobre todo para saber qué fijaciones podrían fijarse a una sola vía para mejorar el rendimiento. Las siguientes funciones pueden ayudarle a encontrar lo que controles usan vinculante por defecto de dos vías:

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;
}

El uso de 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 Muestra (propiedades de control con dos vías de unión como 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 la unión de dos vías.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top