首页 > 解决方案 > 如何通过以下 {Binding Model.Errors[ClassName.PropertyName]} 使用 XAML 绑定

问题描述

在 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# 端时将其更改为点?

不确定是否有其他类型的格式或方法可以实现这一点,而无需写出额外的转换器逻辑?

标签: c#xamlxamarin.forms

解决方案


使用源,卢克: Xamarin 的 XAML 解析器显然不允许这样的语法:它没有正确解析路径,而只是将整个路径字符串拆分为.. 为了解决这个限制,我建议使用一个最小值转换器,让您保持.for member 访问:

// 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'}" />

推荐阅读