2

MvvmCrossを使用して、ViewModelをAndroidViewレイアウトにデータバインドしています。

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プロパティをレイアウト要素のTextColor属性にバインドしたいと思います。別のMvxBindを追加できず、MvxBindをアレイに設定できません。

4

2 に答える 2

3

バインディング式で使用される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; }
}

これは次の場合に使用されます:

  • バインディングのターゲット(表示)プロパティであるディクショナリキー名。
  • バインディングPathプロパティはバインディングのソース(DataContext)プロパティですPath。指定されていない場合は、DataContext自体全体がバインディングソースになります。

アクティビティ/ビューレベルのaxmlの場合、DataContextはViewModelですが、サブビュー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でどのように使用されるかを確認します


動作中の複数のバインディングを示す1つのサンプルはBestSellersです-リストアイテムhttps://github.com/slodge/MvvmCross/blob/master/Sample%20-%20BestSellers/BestSellers/BestSellers.Droid/Resourcesのクリックとテキストバインドを参照してください/Layout/ListItem_Category.axml

于 2012-05-21T18:08:33.933 に答える
1

パス':' HigherLowerこれを行う必要があります:

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

次の点に注意してください。

bind="{ 'Text':{xx}, 'Other':{yy} }"
于 2012-05-21T16:22:33.153 に答える