WPF - 将复杂对象绑定到简单控件

时间:2014-08-13 11:09:24

标签: wpf data-binding binding

我创建了一个名为" BoundProperty"其中包含一个属性" Value"。

绑定到属性,该属性是该类的一个实例 (年龄是一个BoundProperty):

<TextBox Text="{Binding MyModel.Age.Value, Mode=TwoWay}" />

有没有办法让绑定看起来像这样,另外还是双向保留?

<TextBox Text="{Binding MyModel.Age, Mode=TwoWay}" />

对于这个&#34; BoundProperty&#34;我不能使用隐式/显式转换运算符。初始化需要特殊参数,需要从原始对象复制。

谢谢, AD

1 个答案:

答案 0 :(得分:1)

如果Value是公开的,您可以使用ValueConverter:

public class BoundPropertyConverter:IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var age = value as BoundProperty;
        if (age == null)
            return string.Empty;
        return age.Value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int age;
        if (int.TryParse(value.ToString(), out age))
            return new BoundProperty() {Value = age};
        return null;
    }
}

然后在xaml中定义此转换器的命名空间

xmlns:converters="clr-namespace:Your.Namespace"

然后在Resources区域写下这样的东西:

<converters:BoundPropertyConverter x:Key="BoundPropertyConverter"/>

最后但并非最不重要:

<TextBox Text="{Binding MyModel.Age, Mode=TwoWay, Converter={StaticResource BoundPropertyConverter}" />