Estoy a punto de probar un control de usuario que he creado, y estoy encontrando algo que es inexplicable para mí.¿Por qué poner un Convertidor no operativo en un Enlace cambia su comportamiento?
El control es una extensión del ComboBox que maneja valores de un tipo personalizado específico. Tiene una propiedad de dependencia de ese tipo personalizado que es la propiedad de destino de un enlace.
Tengo una instrucción de rastreo en el colocador, y puedo ver que la propiedad se está estableciendo. Pero no está apareciendo en mi control de usuario.
Ahora, normalmente diría, está bien, tengo un error en mi control de usuario. Probablemente sí, aunque estoy desconcertado al respecto. Pero esta pregunta no se trata de encontrar el error bajo mi control. Sigue leyendo; aquí es donde se pone raro.
También estoy usando poca convertidor de valores de Bea Stollnitz para ayudar a depurar el Encuadernación:
public class DebuggingConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value; // Add the breakpoint here!!
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException("This method should never be called");
}
}
La idea detrás de esto es que agrego este convertidor a mi Encuadernación y puede establecer un punto de interrupción para ver qué valor tiene siendo empujado hacia el objetivo. De acuerdo, eso funciona bien. Puedo ver que el valor está siendo expulsado.
De hecho, funciona un poco también bien. Si el DebuggingConverter está conectado a la vinculación, el control de usuario muestra el valor. Si no es así, no es así.
¿Cómo es eso posible? ¿Cómo podría un convertidor de valor que no afecta el comportamiento de un control vinculado?
Editar:
No es que sea probable que ayude, pero aquí está el XAML para el control de usuario:
<a:CodeLookupBox
Grid.Column="1"
Grid.IsSharedSizeScope="True"
MinWidth="100"
Style="{Binding Style}">
<a:CodeLookupBox.CodeLookupTable>
<Binding Path="Codes" Mode="OneWay"/>
</a:CodeLookupBox.CodeLookupTable>
<a:CodeLookupBox.SelectedCode>
<Binding Path="Value" Mode="TwoWay" ValidatesOnDataErrors="True"/>
</a:CodeLookupBox.SelectedCode>
</a:CodeLookupBox>
Sin el convertidor en la segunda unión, el control se comporta como si yo no 't establece SelectedCode
. Aunque una instrucción de seguimiento en el controlador OnSelectedCodePropertyChanged
muestra que e.Value
contiene efectivamente el valor correcto. Esto sucede independientemente de si el convertidor está conectado o no.
He estado tratando de aplicar este problema con un experimento mental: si quisiera crear un control de usuario vinculado cuyo comportamiento cambiara si un convertidor no-operativo estuviera unido a su enlace, ¿cómo lo haría? No sé lo suficiente sobre la vinculación para encontrar una respuesta.
Esto es muy interesante. De cualquier forma, podrías pegar algo de XAML para mostrar los enlaces? –
Esa es una buena pregunta. No tengo una respuesta, pero sé que la publicación en el sitio de Bea da otros consejos sobre la depuración de enlaces. ¿Hay alguna excepción lanzada cuando no está usando el convertidor? –
Lo siento, no puedo ayudarte, pero +1 hace que DebuggingConverter sea una buena idea (aunque no es tu idea). –