String.format xaml电话号码

String.format xaml电话号码,xaml,data-annotations,Xaml,Data Annotations,如何在没有值转换器的情况下将字符串属性格式化为xaml中的电话号码格式。我也在使用 数据注释[电话]。 我试过了,但没用 <TextBlock Text="{Binding Person.Phone, StringFormat=\{0:(000)000\-0000\}}"/> 以下是我在第一次切割时的操作方法: public class ContactViewModel : INotifyPropertyChanged { private Contact _contac

如何在没有值转换器的情况下将字符串属性格式化为xaml中的电话号码格式。我也在使用 数据注释[电话]。 我试过了,但没用

  <TextBlock Text="{Binding Person.Phone, StringFormat=\{0:(000)000\-0000\}}"/>

以下是我在第一次切割时的操作方法:

public class ContactViewModel : INotifyPropertyChanged
{
    private Contact _contact;

    public ContactViewModel(Contact contact)
    {
        _contact = contact;
    }

    public String Phone
    {
        get
        {
            var builder = new StringBuilder(_contact.Phone);
            builder.Insert(6, '-');
            builder.Insert(3, ')');
            builder.Insert(0, '(');
            return builder.ToString();
        }
    }
}

然后在XAML中,我只绑定到
Phone
属性,但是使用这个视图模型适配器层,而不是直接绑定到模型对象上。这是视图模型最突出的功能:使模型适应视图。

如何不工作?另外,使用一个该死的值转换器。如果您这样做了,您可能已经解决了这个问题:)创建一个类型来存储电话号码,并创建一个IVC来将该类型转换为文本,然后再转换回来。这将是最简单的事情。@Will从您使用的语言中我看出您也不喜欢值转换器。。。谢谢,输入类型是什么?一串举一个你使用的数据的例子…不,实际上,值转换器非常有用。我爱他们。你也应该,这就是为什么它不起作用。“0”格式占位符仅适用于数值类型,并且字符串不会在.Net中以静默方式强制为数值类型。如果您想使用这种方法,您需要公开转换为数字类型的值(例如Int64或BigInteger),或者使用更合适的值转换机制,如值转换器,或者仅在视图模型中格式化它,这是我选择的解决方案。