J'ai créé un convertisseur ultime pour toutes les fonctions de System.String, a besoin d'une certaine amélioration aimerait vous entendre, l'espoir de le mettre à jour à l'avenir, s'il vous plaît accepter:
VB:
<ValueConversion(GetType(String), GetType(Object))> _
Class StringFunctions : Implements IValueConverter
Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
If parameter Is Nothing OrElse Not TypeOf parameter Is String OrElse String.IsNullOrEmpty(parameter) Then Return Nothing
Dim parameters As New List(Of String)(parameter.ToString.Split(":"c))
parameter = parameters(0)
parameters.RemoveAt(0)
If String.IsNullOrEmpty(parameter) Then Return value
Dim method = (From m In GetType(String).GetMethods _
Where m.Name = parameter _
AndAlso m.GetParameters.Count = parameters.Count).FirstOrDefault
If method Is Nothing Then Return value
Return method.Invoke(value, parameters.ToArray)
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
Return value.ToString()
End Function
End Class
C#: -convertis par un outil, ne comptez pas!
[ValueConversion(typeof(string), typeof(object))]
public class StringConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null) return null;
value = value.ToString();
if (String.IsNullOrEmpty(value as string)) return "";
if (parameter == null || !parameter is string || String.IsNullOrEmpty((string)parameter)) return value;
List<string> parameters = new List<string>(((string)parameter).Split(':'));
parameter = parameters[0];
parameters.RemoveAt(0);
var method = (from m in typeof(String).GetMethods()
where m.Name== parameter
&& m.GetParameters().Count()==parameters.Count
select m).FirstOrDefault();
if (method == null) return value;
return method.Invoke(value, parameters.ToArray());
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
#endregion
}
Xaml:
<TextBox Text="{Binding Path=String, Converter={StaticResource StringConverter}, ConverterParameter=Trim:Argument:AnotherArgument}" />
Puis, dans la fixation, lorsque u utiliser un convertisseur u ont la possibilité de passer un paramètre au convertisseur (Reliure.ConverterParameter) passe tous vos paramètres séparés par: (deux points - vous pouvez le changer dans le paramètre délimiteur String.Split), tandis que le premier paramètre est le nom de la fonction, la fonction comptera les paramètres supplémentaires et essaiera de la passer.
Je n'ai toujours pas travaillé sur l'adressage des paramètres, c'est une fonction superficielle.
Aimeriez-vous voir vos améliorations et notes.
merci. Shimmy
Je viens de réaliser que mon message est en C#. Vous appelez Trim sans parenthèse, utilisez-vous VB? Si oui, ajoutez un tag pour VB et je peux mettre à jour mon échantillon. – bendewey
Dans l'avenir s'il vous plaît assurez-vous que les spécifications sont clairement énoncées dans la question, pas seulement dans le titre. – bendewey
Je le ferai, merci. Je travaille avec VB et C#, mais ce poste était en effet VB puisque seul VB supporte les méthodes d'appel sans parenthèse. – Shimmy