如何在Android布局元素中绑定多个属性

时间:2012-05-21 16:01:44

标签: xamarin.android mvvmcross

我正在使用MvvmCross将我的ViewModel数据绑定到Android视图布局。

从SimpleBinding示例中我可以看到,要将值绑定到属性,我执行此操作:

  <EditText
    android:hint="Subtotal"
    android:gravity="left"
    android:inputType="numberDecimal"
    android:maxLines="1"
    android:numeric="decimal"        
    local:MvxBind="{'Text':{'Path':'SubTotal','Converter':'Float'}}"
  />

因此Text绑定到ViewModel的SubTotal属性。但是我如何绑定多个属性?在我的例子中,我想将名为HigherLower的ViewModel属性绑定到layout元素的TextColor属性。我无法添加另一个MvxBind,我无法将MvxBind设置为数组。

2 个答案:

答案 0 :(得分:3)

绑定表达式中使用的JSON格式是名为MvxJsonBindingDescription s

的字典
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; }
}

用于:

  • 字典键名是绑定的目标(View)属性。
  • 绑定Path属性是绑定的源(DataContext)属性 - 如果未指定Path,那么整个DataContext本身就是绑定源。

对于Activity / View level axml,DataContext是ViewModel - 但是对于sub-View axml,DataContext通常是ViewModel的子对象 - 例如在ListView中,DataContext可能是ViewModel拥有的List或ObservableCollection中的项目。


要指定多个绑定,您可以使用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类的属性

在工作中显示多个绑定的一个示例是BestSellers - 请参阅列表项https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20BestSellers/BestSellers/BestSellers.Droid/Resources/Layout/ListItem_Category.axml中的单击和文本绑定

答案 1 :(得分:1)

Path':'HigherLower你必须这样做:

local:MvxBind="{'Text':{'Path':'SubTotal','Converter':'Float'}, 'TextColor':{'Path':'HigherLower','Converter':'Color'}}"

请注意:

bind="{ 'Text':{xx}, 'Other':{yy} }"