Как получить доступ к атрибутам свойства в свойстве с привязкой к данным в Silverlight? - PullRequest
1 голос
/ 30 октября 2009

Например, у меня есть простое текстовое поле, привязанное к свойству:

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

Свойство выглядит примерно так:

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

Итак, учитывая текстовое поле, я хотел бы получить свойство отображаемого имени из атрибута. Это будет использоваться в составном элементе управления, который включает в себя метку поля и некоторые другие тонкости.

Заранее спасибо.

1 Ответ

0 голосов
/ 30 октября 2009

Я не могу попробовать это в данный момент, так что это может быть неточным или даже невозможным. Как только я доберусь до компьютера, на котором я смогу попробовать это, я ... до тех пор, , это всего лишь теория.

Я предполагаю, что в вашем составном элементе управления у вас будет что-то вроде этого для каждого поля данных:

<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, ...) рассматриваемый объект или только строковое значение в этом случае. Если это просто строковое значение, это, вероятно, невозможно, хотя, если это вместо этого объект, это будет зависеть от того, насколько у вас есть доступ к пространству имен отражения для оценки атрибутов.

Как только я смогу, я скину сценарий и попробую его.

EDIT:

По какой-то причине подсветка синтаксиса дает мне палец, когда я пытаюсь вставить код в этом редактировании

В любом случае, попробовав это в небольшом проекте, он не думает, что вы сможете это сделать.

Основываясь на моем предложении сделать 2 элемента управления с привязкой к данным и использовать конвертер для того, который использует атрибут, я сделал следующее:

  1. Создан xaml для элемента управления с привязкой к данным.
  2. Создание пользовательского атрибута для тестирования
  3. Создана модель с оформленным свойством для тестирования.
  4. Создан конвертер для попытки чтения атрибута из свойства.

Вот здесь я и попался. Мне не удалось получить связанный тип данных из метода IValueConverter.Convert (...). Параметр value был представлен как String, как и параметр targetType. Хотя это и было основным зависанием, во-вторых, я не смог динамически определить имя свойства, к которому привязан элемент управления. Возможно, это можно исправить с помощью параметра преобразователя.

Теперь я был в состоянии прочитать значение атрибута, если я предоставил тип моей тестовой модели с декорированным свойством, чтобы было возможно многое, но я не смог динамически определить тип на лету.

Единственный другой способ, который я могу придумать, - это создать некоторую форму наблюдателя или преобразователя до того, как данные действительно будут связаны с вашим пользовательским элементом управления.

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...