puede parse numeros long letras convertir convert c# silverlight windows-phone-7 xaml ivalueconverter

c# - parse - Convertidor con múltiples parámetros



string parse c# (3)

¿Alguien sabe cómo usar el convertidor con múltiples parámetros en una aplicación de Windows Phone 7?

Gracias por adelantado.


Esto se puede hacer usando System.Windows.Markup.MarkupExtension ( docs ).

Esto le permitirá pasar valores al convertidor que podrían usarse como argumentos o valores de retorno, por ejemplo:

public class CustomNullToVisibilityConverter : MarkupExtension, IValueConverter { public object NullValue { get; set; } public object NotNullValue { get; set; } public override object ProvideValue(IServiceProvider serviceProvider) { return this; } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return NullValue; return NotNullValue; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }

Uso:

... Visibility="{Binding Property, Converter={cnv:CustomNullToVisibilityConverter NotNullValue=Visible, NullValue=Collapsed}}" /> ...

Asegúrese de hacer referencia al espacio de nombres del convertidor en .xaml .


Los convertidores siempre implementan IValueConverter . Eso significa que una llamada a Convert o ConvertBack pasa un solo parámetro adicional. Ese parámetro se extrae de la XAML.

Como Hitesh Patel sugiere, no hay nada que le impida poner más de un valor en el parámetro, siempre que tenga un delimitador para separarlos más tarde, ¡ pero no puede usar una coma ya que delimita el XAML!

p.ej

XAML

<TextBlock Text="{Binding Path=ReleaseDate, Mode=OneWay, Converter={StaticResource MyConverter}, ConverterParameter=Param1|Param2}" />

Convertidor

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string parameterString = parameter as string; if (!string.IsNullOrEmpty(parameterString)) { string[] parameters = parameterString.Split(new char[]{''|''}); // Now do something with the parameters } }

Nota, no lo he comprobado para ver si hay un tubo "|" el carácter es válido en XAML allí (debería ser), pero si no, simplemente elige otro personaje que no coincida.

Las versiones posteriores de .Net no requieren una matriz de caracteres para la versión más simple de Split , por lo que puede usar esto en su lugar:

string[] parameters = parameterString.Split(''|'');

Apéndice:

Un truco que eBay solía usar en las URL, hace años, era delimitar los datos en la URL con QQ. Una doble Q no ocurre naturalmente en los datos de texto. Si alguna vez te quedas atascado por un delimitador de texto que evitará problemas de codificación, solo usa QQ ... Esto no funcionará con la división (lo que requiere caracteres individuales, pero es bueno saberlo) :)


Siempre puede derivar de la clase DependecyObject y agregar tantas DependencyProperties como desee. Por ejemplo:

ExampleConverter.cs

public class ExampleConverter : DependencyObject, IValueConverter { public string Example { get => GetValue(ExampleProperty).ToString(); set => SetValue(ExampleProperty, value); } public static readonly DependencyProperty ExampleProperty = DependencyProperty.Register("Example", typeof(string), typeof(ExampleConverter), new PropertyMetadata(null)); public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { //Do the convert } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }

Y luego en XAML:

ExampleView.xaml

<ResourceDictionary> <converters:ExampleConverter x:Key="ExampleConverter" Example="{Binding YourSecondParam}"/> </ResourceDictionary> ... <TextBlock Text="{Binding Path=ReleaseDate, Mode=OneWay, Converter={StaticResource ExampleConverter}, ConverterParameter={Binding YourFirstParam}}" />