【问题标题】:Binding to something other than ToString: how?绑定到 ToString 以外的东西:如何?
【发布时间】:2012-05-12 13:11:30
【问题描述】:

我对@9​​87654323@ 命名空间中PhysicalAddress 类的默认ToString() 输出不太满意。输出的格式类似于“AABBCCDDEEFF”, 所以我写了一个扩展方法ToDelimitedString(),它返回格式为“AA-BB-CC-DD-FF”。

到目前为止,一切都很好。现在我想通过使用数据绑定在我的 WPF 应用程序中显示它,但这就是我的路要走的地方。我真的不知道如何绑定到对象实例上的默认 ToString() 以外的任何东西。

有人请指点我正确的方向,我在理解 msdn 文档方面遇到了极大的困难。

【问题讨论】:

    标签: xaml binding methods


    【解决方案1】:

    在这种情况下,最简单的方法可能是写一个转换器:

    public class PhysicalAdressConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var address = value as PhysicalAddress;
            if (address != null)
                return address.ToDelimitedString();
            return value;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }
    

    并在绑定到 PhysicalAddress 时指定此转换器

    如果您使用的是 MVVM 模式,您还可以创建一个执行格式化的属性并绑定到该属性:

    public string FormattedPhysicalAddress
    {
        get { return this.PhysicalAddress.ToDelimitedString(); }
    }
    

    顺便说一句,绑定并没有像您想象的那样绑定到 ToString() 方法。它绑定到值本身,但如果目标类型是string那么它会调用ToString() 使其成为字符串...

    【讨论】:

    • 好东西!也感谢您消除混乱。让我试试这个。
    • 我采用了 IValueConverter 方法(尽管我确实尝试使用 MVVM)并且它运行良好。 :) 我可以问一下在哪里实施 ConvertBack 是合适的吗?我想不出任何用例。如果您需要原始值,您可以直接从源中获取,对吗?
    • @StevenDotNet,ConvertBack 仅用于双向绑定。它将控件中的值转换回 DataContext 属性
    • 啊!现在一切都说得通了。谢谢。
    猜你喜欢
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2012-11-05
    相关资源
    最近更新 更多