我正在使用 MvvmCross 将我的 ViewModel 数据绑定(bind)到 Android View 布局。
从 SimpleBinding 示例中我可以看到,要将值绑定(bind)到属性,我这样做:
<EditText
android:hint="Subtotal"
android:gravity="left"
android:inputType="numberDecimal"
android:maxLines="1"
android:numeric="decimal"
local:MvxBind="{'Text':{'Path':'SubTotal','Converter':'Float'}}"
/>
因此 Text 绑定(bind)到 ViewModel 的 SubTotal 属性。但如何绑定(bind)多个属性呢?就我而言,我想将名为 HigherLower 的 ViewModel 属性绑定(bind)到布局元素的 TextColor 属性。我无法添加另一个 MvxBind,也无法将 MvxBind 设置为数组。
最佳答案
绑定(bind)表达式中使用的 JSON 格式是名为 MvxJsonBindingDescription 的字典
public class MvxJsonBindingDescription
{
public string Path { get; set; }
public string Converter { get; set; }
public string ConverterParameter { get; set; }
public string FallbackValue { get; set; }
public MvxBindingMode Mode { get; set; }
}
这与以下内容一起使用:
- 字典键名称是绑定(bind)的目标( View )属性。
- 绑定(bind)
Path
属性是绑定(bind)的源 (DataContext) 属性 - 如果未指定Path
,则整个 DataContext 本身就是绑定(bind)源。
对于 Activity/View 级别的 axml,DataContext 是 ViewModel - 但对于 subview axml,DataContext 通常是 ViewModel 的子对象 - 例如在 ListView 中,DataContext 可能是 ViewModel 拥有的 List 或 ObservableCollection 中的一项。
要指定多个绑定(bind),您可以使用 JSON,例如:
{
'TargetProperty1':{'Path':'SourceProperty1'},
'TargetProperty2':{'Path':'SourceProperty2'}
}
对于您的特定示例,这可能是:
local:MvxBind="
{
'Text':{'Path':'SubTotal','Converter':'Float'},
'TextColor':{'Path':'HigherLower','Converter':'MyColorConverter'}
}"
你的 ViewModel 是这样的:
public class MyViewModel : IMvxViewModel
{
public float SubTotal { get; set; }
public bool HigherLower { get; set; }
// more code here
}
你的转换器是这样的:
public class MyColorConverter : MvxBaseColorConverter
{
protected override MvxColor Convert(object value, object parameter, CultureInfo culture)
{
return ((bool)value) ? new MvxColor(255,0,0) : new MvxColor(0,255,0);
}
}
以及在设置过程中初始化转换器的位置 - 例如看看 Converters 的属性如何类用于 TwitterSearch
显示多重绑定(bind)工作的一个示例是 BestSellers - 请参阅列表项中的单击和文本绑定(bind) https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20BestSellers/BestSellers/BestSellers.Droid/Resources/Layout/ListItem_Category.axml
关于xamarin.android - 如何在 Android 布局元素中绑定(bind)多个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10688603/