字符串格式化 XAML 电话号码。

3

如何在xaml中将字符串属性格式化为电话号码格式,不使用值转换器。我还使用了数据注释[Phone]。 我尝试了这个方法,但它没有起作用。

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

@Will 从你使用的语言中我看出你也不喜欢值转换器... 不过还是谢谢。 - Joe B
1
输入类型是什么?是字符串吗?请给出一个您使用的数据示例... - codekaizen
1
不,实际上,值转换器非常有用。我喜欢它们。你也应该喜欢。 - user1228
2
这就是为什么它不起作用。'0'格式化占位符只适用于数字类型,而在.Net中,字符串不会被默默地强制转换为数字类型。如果您想使用此方法,您需要将值转换为数字类型(例如Int64或BigInteger),或者使用更合适的值转换机制,如值转换器或在视图模型中进行格式化,这是我选择的解决方案。 - codekaizen
请注意,DataAnnotations 在 WPF 中不被解释。在 ASP.Net 中,有一个服务可以根据具有此属性的模型生成适当的视图标记。这在 WPF 中不存在。在这里,我们使用 MVVM。 - codekaizen
显示剩余2条评论
1个回答

0

以下是我在第一次尝试时的做法:

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属性,但是使用这个视图模型适配器层而不是直接绑定到模型对象。这是视图模型最突出的特点:将模型适应到视图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接