Androidレイアウト要素で複数のプロパティをバインドする方法
-
12-12-2019 - |
質問
MVVMCROSSを使用して、My ViewModelをAndroid Viewレイアウトにデータインにしています。
SimpleBindingの例から、値をバインドするようにすることができます。
<EditText
android:hint="Subtotal"
android:gravity="left"
android:inputType="numberDecimal"
android:maxLines="1"
android:numeric="decimal"
local:MvxBind="{'Text':{'Path':'SubTotal','Converter':'Float'}}"
/>
.
だからテキストはViewModelの小計プロパティにバインドされています。しかし、どのように私は複数の財産にバインドするのですか?私の場合では、LiverLowerと呼ばれるViewModelプロパティをレイアウト要素のtextColor属性にバインドしたいです。もう1つのMVXBindを追加できず、MVxBindを配列に設定することはできません。
解決
バインディング式で使用されている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; }
}
.
- 辞書キー名はバインディングのターゲット(ビュー)プロパティです。
- バインディングのSource(DataContext)プロパティであるバインディング -
Path
が指定されていない場合、DataContext自体はバインディングソースです。
アクティビティ/ビューレベルのAXML DataContextはViewModelです。ただし、サブビューAXMLの場合、DataContextは通常ViewModelの子オブジェクトになります。 ListViewの中にDataContextは、ViewModelによって所有されているリスト内の項目または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);
}
}
.
セットアップ中にその変換器が初期化されています。 コンバータクラスは Twittersearch
作業時の複数のバインディングを示す1つのサンプルはベストセラーです - リスト項目の「クリックとテキスト」を参照してください。 https://github.com/slodge/mvvmcross/blob/master/sample%20-%20bestsellers/bestsellers/bestsellers.droid/リソース/レイアウト/ ListItem_Category.axml
他のヒント
パス ':'ハイローワーはこれを行わなければなりません:
local:MvxBind="{'Text':{'Path':'SubTotal','Converter':'Float'}, 'TextColor':{'Path':'HigherLower','Converter':'Color'}}"
.
注:
bind="{ 'Text':{xx}, 'Other':{yy} }"
.