2012-05-22 87 views
3

我正在使用MvxBindableListView將數據對象的List<>綁定到ListView。我用於行的佈局有幾個TextView s。我成功將Text屬性綁定到我的數據對象中的一個屬性,但我發現我無法綁定到TextColor,因爲該屬性不存在於Mono For Android TextView s;而是使用SetTextColor()方法。那麼我怎樣才能將一個數據對象屬性綁定到一個方法呢?下面是我嘗試使用代碼:在MvvmCross中如何執行自定義綁定屬性

<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'} 
     }" /> 

回答

8

有添加自定義2路大會樣本中「IsFavorite」結合的一個例子 - 見:

此示例中FillTargetFactories的結合設置在解釋遠一點:MVVMCross Bindings in Android

對於單向「源到目標」自定義綁定,代碼應該更簡單一些 - 您只需處理SetValue-並且不需要在任何事件處理代碼中調用FireValueChanged


對於文字顏色,我想像的結合看起來有點像:

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))); 
    } 

注:我沒有這個編譯示例代碼 - 當你得到它的工作,請回來,糾正這個僞代碼:)

+0

說實話,我們只是剪切和粘貼代碼完全是它是,它只是工作 - 不錯的僞代碼! ;) –

+0

如果你在某種SuperSimpleBinding內部構建這些樣本,那麼它會是fab,如果你可以GitHub它:) - 假設GitHub現在是一個動詞:)這對於你的內部培訓和公開是有用的mvx信息:) – Stuart

+1

你能否給我一個線索,我應該如何處理Touch上的類似情況,以及如果我想處理這種綁定,而不是相對某些屬性,但Action(例如,像「Button onclick」) ?我發現MvxTargetBinding類可以繼承,但事件/動作處理/綁定的情況對我來說並不完全清楚。謝謝! – Agat