Tôi muốn mở rộng những gì Rachel đã trả lời. Nếu một số điện thoại là một số nguyên, StringFormat sẽ hoạt động tốt. Trong trường hợp một số điện thoại là một chuỗi, tôi thấy Converter khá tiện dụng. Điều này loại bỏ sự cần thiết phải tạo thêm thuộc tính cho một lớp.
Dưới đây là một ví dụ:
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}}" />
Tại sao không đặt này trực tiếp vào mô hình và thêm một ToFormattedString() hoặc tài sản khác mà bạn liên kết với? Bạn cũng có thể sử dụng Trình chuyển đổi. –