MvvmCross でカスタム バインド プロパティを実行するにはどうすればよいですか
-
13-12-2019 - |
質問
使っています MvxBindableListView
バインドする List<>
データオブジェクトから ListView
. 。行に使用しているレイアウトにはいくつかあります TextView
s.正常にバインドできています Text
これらのそれぞれのプロパティをデータオブジェクトのプロパティにバインドできないことがわかりました TextColor
そのプロパティは Mono For Android には存在しないため TextView
s;代わりに、 SetTextColor()
方法。では、データ オブジェクトのプロパティをメソッドにバインドするにはどうすればよいでしょうか?以下は私が使用しようとしたコードです:
<TextView
android:id="@+id/MyValueTextView"
android:layout_width="50dp"
android:layout_height="20dp"
android:layout_gravity="right"
android:gravity="center_vertical|right"
android:textSize="12sp"
local:MvxBind="
{
'Text':{'Path':'MyValue','Converter':'MyValueConverter'},
'TextColor':{'Path':'MyOtherValue','Converter':'MyOtherConverter'}
}" />
解決
Conference サンプルには、「IsFavorite」のカスタム双方向バインディングを追加する例があります。以下を参照してください。
- バインディング - https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20CirriousConference/Cirrious.Conference.UI.Droid/Bindings/FavoritesButtonBinding.cs
- のバインディングセットアップ
FillTargetFactories
で https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20CirriousConference/Cirrious.Conference.UI.Droid/Setup.cs
この例については、次でもう少し詳しく説明します。 Android での MVVM クロス バインディング
一方向の「ソースからターゲットへ」のカスタム バインディングの場合、コードはもう少し単純になるはずです。処理する必要があるのは、 SetValue
- 呼び出す必要はありません FireValueChanged
あらゆるイベント処理コード内で。
textColor の場合、バインディングは次のようになると思います。
public class MyCustomBinding
: MvxBaseAndroidTargetBinding
{
private readonly TextView _textView;
public MyCustomBinding(TextView textView)
{
_textView = textView;
}
public override void SetValue(object value)
{
var colorValue = (Color)value;
_textView.SetTextColor(colorValue);
}
public override Type TargetType
{
get { return typeof(Color); }
}
public override MvxBindingMode DefaultMode
{
get { return MvxBindingMode.OneWay; }
}
}
そして、次のようにセットアップされます。
protected override void FillTargetFactories(MvvmCross.Binding.Interfaces.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry)
{
base.FillTargetFactories(registry);
registry.RegisterFactory(new MvxCustomBindingFactory<TextView>("TextColor", (textView) => new MyCustomBinding(textView)));
}
注記:このサンプルコードはコンパイルしていません - 動作するようになったら、戻ってきてこの疑似コードを修正してください:)
所属していません StackOverflow