Me gustaría extender lo que ya ha respondido Rachel. Si un número de teléfono es un número entero, StringFormat funcionaría bien. En caso de que un número de teléfono sea una cadena, me pareció que Converter es bastante útil. Esto elimina la necesidad de crear propiedades adicionales para una clase.
Aquí se muestra un ejemplo:
public class StringToPhoneConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return string.Empty;
//retrieve only numbers in case we are dealing with already formatted phone no
string phoneNo = value.ToString().Replace("(", string.Empty).Replace(")", string.Empty).Replace(" ", string.Empty).Replace("-", string.Empty);
switch (phoneNo.Length)
{
case 7:
return Regex.Replace(phoneNo, @"(\d{3})(\d{4})", "$1-$2");
case 10:
return Regex.Replace(phoneNo, @"(\d{3})(\d{3})(\d{4})", "($1) $2-$3");
case 11:
return Regex.Replace(phoneNo, @"(\d{1})(\d{3})(\d{3})(\d{4})", "$1-$2-$3-$4");
default:
return phoneNo;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
xaml:
<TextBox Text="{Binding SelectedParticipant.PhoneNumber, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource StringToPhoneConverter}}" />
Por qué no poner esto directamente en el modelo y añadir un ToFormattedString() u otros bienes que se enlaza a? También puedes usar un convertidor. –