Tengo problemas con un convertidor que estoy usando para convertir una cadena en nuestro formato de tiempo. El propio convertidor funciona bien y está implemeneted así:usando IValueConverter con DataContext actual en enlace bidireccional
[ValueConversion(typeof(string), typeof(SimpleTime))]
public class StringToSimpleTimeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// convert from string to SimpleTime and return it
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// convert value from SimpleTime to string and return it
}
}
el XAML que utiliza el convertidor incluye el propio convertidor en los usercontrol.resources así:
<converter:StringToSimpleTimeConverter x:Key="stringToSimpleTimeConverter"/>
Si se encuentra la propiedad (I 'm usando la cuadrícula de datos del kit de herramientas de WPF en el fondo) DataTemplate para la edición del simpletime se utiliza:
<DataTemplate x:Key="SimpleTimeEditingTemplate">
<TextBox Text="{Binding, Converter={StaticResource stringToSimpleTimeConverter}, Mode=TwoWay}"/>
</DataTemplate>
el problema que estoy encontrando es que el aire verter necesita tener una ruta especificada en el enlace si se trata de un convertidor de dos vías (y lo necesito en ambas direcciones), pero la propiedad que quiero establecer ya es el DataContext actual. ¿Qué camino puedo especificar para eso?
La única solución que se me ocurre es introducir una propiedad ficticia en el SimpleTime que solo obtiene el SimpleTime actual o lo establece.
public class SimpleTime
{
...
public SimpleTime Clone
{
get { return new SimpleTime(_amount, _format); }
set { this._amount = value._amount; this._format = value._format; }
}
}
y obligar a que una vía
<TextBox Text="{Binding Clone, Converter={StaticResource stringToSimpleTimeConverter}, Mode=TwoWay}"/>
que funciona bien, pero no es realmente una solución adecuada, especialmente si necesito convertidores para más veces ...
cualquier ayuda es apreciado vítores, manni
He intentado un enfoque similar utilizando un control de usuario padre para el cuadro de texto y vinculante a su contexto de datos. El IValueConverter se llama correctamente para convertir la cadena en simpletime y volver para mostrar la cadena en el control, pero nunca se llama al conjunto de la propiedad simpletime en la estructura de datos. ¿Alguien sabe cómo puede suceder esto? – manni
@manni: Hice una aplicación de prueba con esto y para mí parece estar funcionando bien. Se une a su propio DataContext así que no veo ninguna razón para que no funcione. ¿Estás seguro de que tu método ConvertBack nunca se llama? –
gracias por el esfuerzo. Creo que lo que quiero decir no fue lo suficientemente claro: se llaman mis métodos de conversión y conversión si cambio el valor en la interfaz gráfica de usuario, eso está funcionando bien. pero no se llama a la propiedad setter de la propiedad que estoy configurando (la propiedad simpletime) (no se desencadena el punto de interrupción). Echaré un vistazo a eso ahora, muchas gracias por su ayuda, realmente aprecio que – manni