2015-07-03 65 views
-1

我試圖從一個標籤綁定的TextColorViewCell用的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),就不可能說出什麼問題。我會說,從你的代碼示例看來,你綁定了一個實際上不在你的UI中的「Label」實例(即,你在運行中創建它並且不會將它附加到任何地方),並且你綁定了錯誤屬性路徑(應該是「TextColor」,而不是「TheTextColor」)。 –

+0

這是代碼的簡短版本。我不會發送到這裏,我有另一個UI的代碼和viewModel的其他屬性工作正常,如TextProperty。 來自Label的文本是黑色的,所以對轉換器和轉換器的條件不起作用。 以上這個綁定我有: 'myLabel.SetBinding(Label.TextProperty,「TheNames」);' 它工作正常... –

+0

請閱讀我提供的鏈接,以瞭解「good,_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。