Estoy tratando de vincularme a una propiedad entera:
<RadioButton Content="None"
IsChecked="{Binding MyProperty,
Converter={StaticResource IntToBoolConverter},
ConverterParameter=0}" />
y mi convertidor es:
[ValueConversion(typeof(int), typeof(bool))]
public class IntToBoolConverter : IValueConverter
{
public object Convert(object value, Type t, object parameter, CultureInfo culture)
{
return value.Equals(parameter);
}
public object ConvertBack(object value, Type t, object parameter, CultureInfo culture)
{
return value.Equals(false) ? DependencyProperty.UnsetValue : parameter;
}
}
el problema es que cuando se llama a mi convertidor, el parámetro es una cadena. Necesito que sea un número entero. por supuesto que puedo analizar la cadena, pero ¿tengo que hacerlo?
gracias por cualquier ayuda konstantin
wpf
binding
ivalueconverter
Akonsu
fuente
fuente

Respuestas:
¡Aqui tienes!
El truco consiste en incluir el espacio de nombres para los tipos de sistemas básicos y luego escribir al menos el enlace ConverterParameter en forma de elemento.
fuente
IValueConverter.Convert()'s 'parámetro' parámetro esobject. Todavía tienes que emitirlo / analizarlo ...Para completar, una posible solución más (quizás con menos escritura):
(Por supuesto,
Windowse puede reemplazar porUserControlyIntZerose puede definir más cerca del lugar de uso real).fuente
No estoy seguro de por qué la
WPFgente tiende a no estar dispuesta a consumirMarkupExtension. Es la solución perfecta para muchos problemas, incluido el mencionado aquí.Si esta extensión de marcado está disponible en el
XAMLespacio de nombres 'm', el ejemplo del póster original se convierte en:Esto funciona porque el analizador de extensiones de marcado puede ver el tipo fuerte del argumento del constructor y convertir en consecuencia, mientras que el argumento ConverterParameter de Binding es (menos informativo) de tipo Objeto.
fuente
Valueun enobjectlugar deintevitar meterlo en cajas cada vezProvideValue. (Y luego,privateevite asignar algo ilegal directamente).ProvideValuelo general, solo se llama una vez por instancia de extensión de marcado, por lo que el encuadre solo debe ocurrir una vez de todos modos. Al no hacerlo en el constructor, evito boxear por completo siProvideValuenunca se llama. En cuanto a hacerValueprivado, esto excluiría el uso de la extensión de marcado en laXAMLsintaxis del elemento de objeto: msdn.microsoft.com/en-us/library/…Binding.ConverterParameterno tiene un tipo específico (es solo unobject), por lo que el analizador no sabe qué conversión aplicar, por lo tanto, cada literal se trata como una cadena.{m:Int32 Value=0}funcionaría igual de bien.)No lo use
value.Equals. Utilizar:fuente
value.Equals?Sería bueno expresar de alguna manera la información de tipo para ConverterValue en XAML, pero no creo que sea posible a partir de ahora. Así que supongo que tienes que analizar el objeto convertidor a tu tipo esperado por alguna lógica personalizada. No veo otra forma.
fuente