我创建了一个名为" BoundProperty"其中包含一个属性" Value"。
绑定到属性,该属性是该类的一个实例 (年龄是一个BoundProperty):
<TextBox Text="{Binding MyModel.Age.Value, Mode=TwoWay}" />
有没有办法让绑定看起来像这样,另外还是双向保留?
<TextBox Text="{Binding MyModel.Age, Mode=TwoWay}" />
对于这个&#34; BoundProperty&#34;我不能使用隐式/显式转换运算符。初始化需要特殊参数,需要从原始对象复制。
谢谢, AD
答案 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}" />