Pregunta

Tengo un IMultivalUeConver extremadamente simple que simplemente o los dos valores. En el siguiente ejemplo, quiero invertir el primer valor usando un inversor booleano igualmente simple.

<MultiBinding Converter="{StaticResource multiBoolToVis}">
    <Binding Path="ConditionA" Converter="{StaticResource boolInverter}"/>
    <Binding Path="ConditionB"/>
</MultiBinding>

y el inversor:

public class BoolInverterConverter : IValueConverter
{
    #region IValueConverter Members
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is bool)
        {
            return !((bool)value);
        }
        return null;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
    #endregion
}

Cuando incluyo el boolinverter, el primer valor en el multivalueconverter se convierte en un "dependenceProperty.unsetValue". No hay problemas cuando no uso el convertidor (aparte de que no la lógica a la que apunto, por supuesto).

¿Me estoy perdiendo de algo? Pasar por el depurador muestra que el inversoBoolConverter está invirtiendo correctamente el valor que lo paso, pero ese valor no se 'envía' al multivalueconverter.

¿Fue útil?

Solución

De MSDN:

UnsetValue es un valor centinela que se utiliza para escenarios en los que el sistema de propiedades WPF no puede determinar un valor de dependencia solicitado. UnsetValue se usa en lugar de referencia nula (nada en Visual Basic), porque la referencia nula podría ser un valor de propiedad válido, así como un valor predeterminado válido (y con frecuencia).

Lo que significa una de las siguientes cosas:

  • Usas una plantilla (ControlTemplate o DataTemplate), y el valor no tiene una fuente de datos establecida en el momento de ser cargado. Por lo tanto, golpeará a su convertidor dos veces, primero con el Valor, segundo con el valor booleano; Así que no hay nada por lo que preocuparse;
  • Su Binding es incorrecto, lo que significa que el enlace no puede determinar un valor, lo que resulta en el valor no establecido. Debe ver propbiblemente una advertencia.

Además, no puedes combinar convertidores como lo haces ... así que probablemente sea eso.

¡Retire el convertidor en la encuadernación interna, y debe arreglarse! :)

¡Espero que esto ayude!

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