通过绑定获取名字 C# XAML 的首字母
Get Initials of First Name C# XAML through Binding
我有一个名字,例如 Jonny Bravo,我希望我的标签通过绑定反映该名字 (JB) 的首字母。我该怎么办?
我需要一个完全通过 XAML/Binding 的代码,如果需要的话可能还需要 ValueConverter。有什么建议吗?
使用值转换器。
转换器:
public class InitialsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string s = value as string;
string i = string.Empty;
if (s != null)
{
string[] split = s.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (string piece in split)
{
i += piece[0];
}
}
return i;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Xaml 使用:
<TextBox Text="{Binding Name, Converter={StaticResource InitialsConverter}}" />
在您的 viewModel
的全名 属性 的 Setter 中填写首字母 属性
Public string FullName{
...
Set{
this.fullName = value;
this.Initials = GenerateInitialsFromFullName();
}
或者按照建议创建一个 ValueConverter。
使用值转换器是可行的方法,因为如果需要,它可以在代码的其他地方重复使用。
这是我使用 Regex 拼凑起来的快速查找第一个字母的方法(请注意,拆分字符串会提供更好的性能)。
public class InitialsConverter : IValueConverter
{
public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string str = value as string;
if (str != null)
{
string s = "";
MatchCollection matches = Regex.Matches(str, @"(\b\w)");
foreach (Match m in matches)
s += m.Value;
return s;
}
else
{
return null;
}
}
public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
用法:
<!--Declare in your scope's resources-->
<Window.Resources>
<r:InitialsConverter x:Key="initials"/>
</Window.Resources>
<!--Bind to a string using the converter-->
<TextBlock Text="{Binding MyName, Converter={StaticResource initials}}"/>
没有转换器:
使用转换器:
我有一个名字,例如 Jonny Bravo,我希望我的标签通过绑定反映该名字 (JB) 的首字母。我该怎么办?
我需要一个完全通过 XAML/Binding 的代码,如果需要的话可能还需要 ValueConverter。有什么建议吗?
使用值转换器。
转换器:
public class InitialsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string s = value as string;
string i = string.Empty;
if (s != null)
{
string[] split = s.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (string piece in split)
{
i += piece[0];
}
}
return i;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Xaml 使用:
<TextBox Text="{Binding Name, Converter={StaticResource InitialsConverter}}" />
在您的 viewModel
的全名 属性 的 Setter 中填写首字母 属性Public string FullName{
...
Set{
this.fullName = value;
this.Initials = GenerateInitialsFromFullName();
}
或者按照建议创建一个 ValueConverter。
使用值转换器是可行的方法,因为如果需要,它可以在代码的其他地方重复使用。
这是我使用 Regex 拼凑起来的快速查找第一个字母的方法(请注意,拆分字符串会提供更好的性能)。
public class InitialsConverter : IValueConverter
{
public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string str = value as string;
if (str != null)
{
string s = "";
MatchCollection matches = Regex.Matches(str, @"(\b\w)");
foreach (Match m in matches)
s += m.Value;
return s;
}
else
{
return null;
}
}
public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
用法:
<!--Declare in your scope's resources-->
<Window.Resources>
<r:InitialsConverter x:Key="initials"/>
</Window.Resources>
<!--Bind to a string using the converter-->
<TextBlock Text="{Binding MyName, Converter={StaticResource initials}}"/>
没有转换器:
使用转换器: