【问题标题】:How to access property attributes on a data bound property in Silverlight?如何在 Silverlight 中访问数据绑定属性的属性属性?
【发布时间】:2010-12-11 17:30:49
【问题描述】:

例如,我有一个绑定到属性的简单文本框:

<TextBox Text="{Binding  FirstName, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}" />

该属性如下所示:

[Display(Name="Last Name")]
public string LastName { ... }

所以,给定文本框,我想从属性中获取显示名称属性。这将用于包含字段标签和其他一些细节的复合控件。

提前致谢。

【问题讨论】:

    标签: silverlight data-binding


    【解决方案1】:

    我目前无法尝试此操作,因此这可能不准确,甚至不可能。只要我拿到一台可以尝试的电脑,我就会……直到那时,这只是理论。

    我猜在您的复合控件中,每个数据绑定字段都会有类似的内容:

    <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, ...) 是否传递了有问题的对象,或者在这种情况下只是传递了字符串值。如果只是字符串值,则可能是不可能的,但如果是对象,则取决于您对反射命名空间的访问权限以评估属性。

    我会尽快将场景放在一起尝试一下。

    编辑:

    由于某种原因,当我尝试在此编辑中粘贴代码时,语法荧光笔给了我手指

    无论如何,在一个小项目中尝试过之后,它认为你做不到。

    根据我制作 2 个数据绑定控件并为使用该属性的控件使用转换器的建议,我执行了以下操作:

    1. 为数据绑定控件创建了 xaml。
    2. 为测试创建自定义属性
    3. 创建了带有修饰属性的模型以进行测试。
    4. 创建了转换器以尝试从属性中读取属性。

    这就是我被抓住的地方。我无法从 IValueConverter.Convert(...) 方法获取数据绑定类型。 value 参数和 targetType 参数一样以 String 形式出现。虽然这是主要的问题,但第二个问题是我无法动态识别控件数据绑定到的属性名称。这可能通过转换器参数来解决。

    现在,如果我提供了带有修饰属性的测试模型的类型,那么我就能够读取属性值,这样就可以了,但我无法动态地动态识别类型。

    我能想到的唯一其他方法是在数据真正绑定到您的自定义控件之前创建某种形式的观察者或转换器。

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      相关资源
      最近更新 更多