Как использовать привязку XAML со следующими {Binding Model.Errors [ClassName.PropertyName]} - PullRequest
1 голос
/ 24 июня 2019

Привязка в xaml выдает следующую ошибку:

System.FormatException: Indexer did not contain closing bracket

Как я могу предоставить имя класса и свойства в виде строкового значения внутри Model.Errors [строковое значение с точкой (точками) здесь]

Это работает

Text="{Binding User.Errors[Forename]}"

Это не при попытке добавить строковое значение с точкой

<Label Text="{Binding User.Errors[UserDetail.PhoneNumber]}" />

Наличие точки позволяет мне иметь область видимости внутреннегоимя класса и свойства на стороне c #.Я мог бы заменить точку на +, но тогда я предполагаю, что мне нужно будет построить какой-нибудь конвертер, чтобы изменить + на точку, когда она достигнет стороны c #?

Не уверен, есть ли какой-то другой видформат или способ достижения этого без выписывания дополнительной логики преобразователя?

1 Ответ

2 голосов
/ 24 июня 2019

Использовать источник, Люк: Парсер XAML Xamarin, по-видимому, не допускает такой синтаксис: он не анализирует путь должным образом, а просто разбивает всю строку пути на ..Чтобы обойти это ограничение, я предлагаю минимальный конвертер значений, который позволит вам сохранить . для доступа к элементу:

// error handling and boilerplate omitted
public class ErrorConverter : IValueConverter
{
    public object Convert (object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        return ((ErrorCollection) value)[(string)parameter] ;
    }
}

Затем использовать его в привязках, таких как:

<Label Text="{Binding User.Errors, Converter={StaticResource ErrorConverter},
     ConverterParameter='UserDetail.PhoneNumber'}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...