ich eine ultimative Konverter für alle Funktionen in System.String erstellt, würden einige Verbesserungen benötigt, von Ihnen zu hören, hoffen, dass es in Zukunft zu aktualisieren, bitte akzeptieren:
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#: -durch ein Werkzeug umgewandelt, nicht verlassen!
[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}" />
Dann wird in der Bindung, wenn u ein Konverter u eine Option verwenden, um einen Parameter zu dem Wandler passieren (zu binden.ConverterParameter) übergeben Sie alle Ihre Parameter getrennt mit: (Doppelpunkt - Sie können es im Parameter String.Split delimiter ändern), während der erste Parameter der Funktionsname ist, zählt die Funktion die zusätzlichen Parameter und versuchen, sie zu übergeben.
Ich habe noch nicht an den Parametern Adressierung gearbeitet, es ist eine flache Funktion.
Möchten Ihre Verbesserungen und Notizen sehen.
danke. Shimmy
Ich habe gerade festgestellt, dass mein Beitrag in C# ist. Sie rufen Trim ohne Klammern auf, verwenden Sie VB? Wenn ja, fügen Sie ein Tag für VB hinzu und ich kann mein Beispiel aktualisieren. – bendewey
Bitte stellen Sie in Zukunft sicher, dass die Angaben in der Frage eindeutig angegeben sind, nicht nur im Titel. – bendewey
Ich werde, danke. Ich arbeite mit VB & C#, aber dieser Beitrag war in der Tat VB, da nur VB Aufrufmethoden ohne Klammern unterstützt. – Shimmy