2016-06-09 8 views
0

ich MVVM Licht in meinem Xamarin.Android Projekt bin mit und möchte meine MainViewModel ‚s StatusColor Eigenschaft auf dem Hintergrund eines GradientDrawable binden, die als Hintergrund einer ImageView Steuerung wirkt .Bind Drawble Hintergrundfarbe mit MVVM Licht in Xamarin.Android

Leider hat eine GradientDrawable keine Color Eigenschaft, dass ich meine Farbe an, nur eine SetColor(int) Methode binden könnte. Gibt es eine Möglichkeit, MVVM Licht zu sagen, immer diese SetColor(int) Methode zu nennen, wenn sich die StatusColor Eigenschaft meiner MainViewModel ändert?

Die hässliche Alternative wäre ein Ereignis ausgelöst, wenn das Ansichtsmodell die Farbe Eigenschaft ändert, aber ich möchte wirklich, dass vermeiden ...

derzeit Mein Code sieht wie folgt aus (!):

// This does not work! 
this.SetBinding(
    () => MainViewModel.StatusColor, 
    () => ((GradientDrawable)IvStatus.Background).Color); // There is no GradientDrawable.Color property... 

Wenn es hilft, hier ist meine IvStatus Kontrolle und der Drawable sein Hintergrund ist eingestellt auf:

IvStatus:

<ImageView 
    android:id="@+id/ivStatus" 
    android:background="@drawable/Circle"          
    android:layout_width="10dip" 
    android:layout_height="10dip" 
    android:layout_gravity="center_vertical" /> 

Circle.xml:

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid android:color="#cccccc"/> 
    <stroke 
     android:width="1dip" 
     android:color="#333333"/> 
</shape> 

Vielen Dank im Voraus!

+0

Ich glaube nicht, dass Sie können. Vielleicht werfen Sie einen Blick auf die MvvmCross-Bibliotheken, die möglicherweise eine verbindliche Lösung bieten. Aber soweit ich das für MvvmLight weiß, sollten Sie einfach das Property Change Event in Ihrer Android App abonnieren und manuell einen neuen GradientBrush erstellen, wenn sich der Farbwert in Ihrer VM geändert hat – Miiite

Antwort

1

Verwenden Sie die Binding.WhenSourceChanges-Methode.

this.SetBinding(
    () => MainViewModel.StatusColor) 
    .WhenSourceChanges(() => 
     { 
      // This is where you can use SetColor 
     }); 
Verwandte Themen