Обязательный вопрос Silverlight - PullRequest
0 голосов
/ 18 февраля 2011

HI All,

Я впервые пробую свою руку с Silverlight, и у меня возник вопрос по поводу связывания. У меня есть форма, которая связана с пользовательским объектом данных. На это у меня есть две коробки, помеченные так:

Опыт вождения [Текстовое поле] лет [Текстовое поле] месяцев.

Мне нужно связать это с одним целочисленным свойством DrivingExperienceMonths. Так, например, если DrivingExperienceMonths равен 29, я вижу 2 в текстовом поле лет и 5 в текстовом поле месяцев.

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

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

Ответы [ 3 ]

2 голосов
/ 18 февраля 2011

Вы можете сделать это в WPF, внедрив IMultiValueConverter, но, к сожалению, это не поддерживается в Silverlight.

Лучшим вариантом часто является то, что ваш ViewModel справится с этим.Это может создать свойства «Месяцы» и «Годы», которые автоматически синхронизируются с вашим значением DrivingExperienceMonths.

Если вы хотите использовать привязку OneWay (только для отображения), можно использовать два IValueConverter с.Для TwoWay привязки данных, это должно быть обработано в коде.

0 голосов
/ 18 февраля 2011

Возможно, вы можете создать преобразователь значений , который извлекает соответствующую информацию из этого свойства (указывается с помощью ConverterParameter)

Редактировать: Как я только что заметил (и Копси отметил в своем ответе), это не сработает, если вам нужна двусторонняя привязка. Лучше сделать конвертацию в двух отдельных свойствах ...

Примерно так:

public int DrivingExperienceMonths { get; set; }

public int ExpMonths
{
    get { return DrivingExperienceMonths % 12; }
    set { DrivingExperienceMonths = (ExpYears * 12) + value; }
}

public int ExpYears
{
    get { return DrivingExperienceMonths / 12; }
    set { DrivingExperienceMonths = (value * 12) + ExpMonths; }
}
0 голосов
/ 18 февраля 2011

Я бы создал преобразователь значений (класс, производный от IValueConverter), который преобразует целое число в полную строку. Затем вы должны установить экземпляр ValueConverter в привязке.

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