2016-06-09 2 views
0

Я использую MVVM свет в моем Xamarin.Android проект и хотел бы связать StatusColor собственности моих MainViewModel «ы на фон GradientDrawable, который выступает в качестве фона в ImageView контроля ,Bind Drawble Цвет фона с MVVM светом в Xamarin.Android

К сожалению, GradientDrawable не имеет свойства Color, которое я мог бы связать своим цветом, всего лишь методом SetColor(int). Есть ли способ рассказать, что MVVM свет всегда вызывает этот метод SetColor(int) всякий раз, когда изменяется свойство StatusColor моих MainViewModel?

Уродливый альтернативой будет стрелять событие, когда ViewModel изменяет свойство цвета, но я действительно хочу, чтобы избежать этого ...

Мой код в настоящее время выглядит следующим образом (!):

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

Если это помогает, вот мой IvStatus контроль и Drawable его фона устанавливается:

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> 

Спасибо заранее!

+0

Я не думаю, что вы можете. Возможно, взгляните на библиотеки MvvmCross, они могут иметь обходное решение. Но насколько я знаю, для MvvmLight вам нужно просто подписаться на событие с измененным свойством, в вашем приложении для Android и вручную создать новый GradientBrush, когда значение цвета изменилось на вашей виртуальной машине – Miiite

ответ

1

Используйте метод Binding.WhenSourceChanges.

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

 Смежные вопросы

  • Нет связанных вопросов^_^