例如,我有一个绑定到属性的简单文本框:
<TextBox Text="{Binding FirstName, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}" />
该属性看起来像这样:
[Display(Name="Last Name")]
public string LastName { ... }
因此,给定文本框,我想从属性中获取Display Name属性。这将用于包含fieldlabel和其他一些细节的复合控件。
提前致谢。
答案 0 :(得分:0)
我目前无法尝试此操作,因此这可能不准确甚至不可能。一到达计算机,我就可以试试这个......直到那时, 这只是理论。
我猜你的复合控件你会为每个数据绑定字段都有这样的东西:
<TextBlock Text="{Binding FirstName, Mode=OneWay}" />
<TextBox Text="{Binding FirstName, Mode=TwoWay, ...}" />
为了创建一个转换器来查看Display
属性的绑定数据,并将值转换为属性值,您可能需要做些什么。这会导致上面的块看起来像这样:
<TextBlock Text="{Binding FirstName, Mode=OneWay, Converter={StaticResource AttributeConverter}, ConverterParameter=Display}" />
<TextBox Text="{Binding FirstName, Mode=TwoWay, ...}" />
在这里,我传递了Display
作为参数,以防您想要访问其他属性。
同样这只是理论,因为我目前无法对此进行测试,并且无法回想起IValueConverter.Convert(object value, ...)
是否通过了相关对象,或者只是字符串值。如果它只是字符串值,它可能是不可能的,但如果它是对象,它将取决于您对反射命名空间的访问量以评估属性。
一旦我能够,我就会把这个场景放在一起然后尝试一下。
修改强>
出于某种原因,当我尝试在此编辑中粘贴代码时,sytax荧光笔正在给我指示
无论如何,在一个小项目中尝试这个之后,它认为你不能这样做。
基于我建议制作2个数据绑定控件并使用转换器来使用属性的方法,我做了以下内容:
这是我被抓住的地方。我无法从IValueConverter.Convert(...)方法获取数据绑定类型。 value参数作为String传递,与targetType参数一样。虽然这是主要的挂断,但第二个是我无法动态识别控件被数据绑定到的属性名称。这可以通过转换器参数来补救。
现在,如果我提供了带有装饰属性的测试模型的类型,那么我能够读取属性值,因此我可以动态地识别类型。
我能想到的另一种方法是在数据真正绑定到自定义控件之前创建某种形式的观察者或转换器。
祝你好运