2015-07-03 7 views
-1

Я пытаюсь связывать TextColor с ярлыка на ViewCell:Связывание с IValueConverter не работает

Label myLabel = new Label { Text = "SomeText" }; 

myLabel.SetBinding(Label.TextColorProperty, 
    new Binding("TheTextColor", BindingMode.TwoWay, new LabelTextColorConverter())); 

Вот преобразователь:

public class LabelTextColorConverter : IValueConverter 
{ 
    public bool OldValue { get; set; } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     OldValue = (bool) value; 
     Debug.WriteLine("asdadasdsadsada"); 
     if ((bool)value) 
      return Color.Red; 
     else 
      return Color.Silver; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     Debug.WriteLine("qwqweqewqeeqe"); 
     return OldValue; 
    } 
} 

Выход отладки не отображается, и цвет тоже не меняется. Я не вижу ничего плохого.

+2

Без [хорошего, _minimal_, _complete_ кода примера] (https://stackoverflow.com/help/mcve) было бы невозможно сказать, что не так. Я скажу, что из вашего примера кода кажется, что вы привязываетесь к экземпляру «Label», который на самом деле не является вашим пользовательским интерфейсом (т. Е. Вы создаете его на лету и не прикрепляете его нигде), и вы привязываетесь к неправильному путь свойства (должен быть «TextColor», а не «TheTextColor»). –

+0

Это короткая версия кода. Я не посылаю сюда, у меня есть другой пользовательский интерфейс для кода, а остальные свойства из viewModel отлично работают, например TextProperty. Текст с ярлыка черный, поэтому условный преобразователь и преобразователь не работают. Выше этого связывания у меня есть: 'myLabel.SetBinding (Label.TextProperty,« TheNames »);' Он отлично работает ... –

+0

Пожалуйста, прочитайте ссылку, которую я предоставил, чтобы понять, что означает «хороший, _minimal_, _complete_ code пример ", а также информацию о том, почему такой пример кода требуется. Прочтите https://stackoverflow.com/help/how-to-ask для получения дополнительной информации о том, как представить свой вопрос ясным, ответным путем. –

ответ

0

Зачем вам требуется двусторонняя привязка? Я не думаю, что это необходимо.

myLabel.SetBinding(Label.TextColorProperty, new Binding("TheTextColor", BindingMode.OneWay, new LabelTextColorConverter())); 

Тогда:

public class LabelTextColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     bool val = (bool)value; 

     if (val) 
      return Color.Red; 
     else 
      return Color.Silver; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

... и он должен работать нормально. Также убедитесь, что вы правильно настроили BindingContext для своей страницы/элементов управления.