c# - 如何通过以下 {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# 端时将其更改为点?
不确定是否有其他类型的格式或方法可以实现这一点,而无需写出额外的转换器逻辑?
解决方案
使用源,卢克: 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'}" />
推荐阅读
- r - 如何在 R 中创建一个 for 循环来运行一个简单的随机样本并计算每个集合的平均值
- python - 如何使用嵌套字典列表
- javascript - 在引导弹出窗口中插入“关闭按钮”
- react-native - 有没有办法直接从 Swift 打开注册的屏幕
- django - 从 django 应用程序 ssh 服务器的最佳方式是什么?
- node.js - 无法从 Node.js 中的 Amazon-S3 获取签名 URL
- ios - Apple Review 无法获得 Apple 健康许可
- mysql - 一个查询中的多个 COUNT(DISTINCT CAST(field AS DATE)
- ios - 从另一个控制器使用 UITextField 添加文本时,它不会显示在 UITableView
- javascript - Google Ads 脚本 - 将 Logger.log 内容发送到电子邮件?