2015-05-08 123 views
0

我想在我的控件Xamarin.Forms上设置DataTrigger,但我无法让它工作。Xamarin.Forms DataTrigger不工作

我有房产的视图模型与OnPropertyChange执行的bool IsValid

我曾尝试:

DataTrigger在XAML:

<customControls:NumericTextBox 
    Grid.Row="0" Grid.Column="2" 
    Text="{Binding StringValue, Mode=TwoWay}" 
    IsEnabled="{Binding IsEditable}" 
    XAlign="End"> 
    <customControls:NumericTextBox.Style> 
    <Style TargetType="customControls:NumericTextBox"> 
     <Style.Triggers> 
     <DataTrigger TargetType="customControls:NumericTextBox" Binding="{Binding IsValid}" Value="true"> 
      <Setter Property="TextColor" Value="Red"/> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </customControls:NumericTextBox.Style> 
</customControls:NumericTextBox> 

获取例外:The Property TargetType is required to create a Xamarin.Forms.DataTrigger object.

DataTrigger在控制:

_item = new DataTrigger(typeof(NumericTextBox)); 
_item.Binding = new Binding("IsValid",BindingMode.Default,new NegativeBooleanConverter()); 
_item.Value = true; 
Setter s = new Setter(); 
s.Property = TextColorProperty; 
s.Value = Color.Red; 
_item.Setters.Add(s); 
this.Style.Triggers.Add(_item); 

例外:Exception has been thrown by the target of an invocation.

我已经试过也在改变行:this.Style.Triggers.Add(_item);this.Triggers.Add(_item);。这并没有引发异常,但它没有奏效。

在这最后的尝试,它甚至击中转换器,但不会改变控件的TextColor。

我做错了什么?如何处理?

+0

我想你可能会打一个(已知)的问题:http://forums.xamarin.com/discussion/30465/using-datatrigger-in-xaml – Krumelur

+1

那么有没有其他的方法来处理这个问题?它是最重要的功能之一:( – Tomasz

回答

-1

我遇到了同样的问题。作为一种解决方法,您可以将TextColor属性绑定到ViewModel中的Color属性,而不是使用DataTrigger。在IsValid设置器中,您可以根据该值设置颜色。

public bool IsValid 
{ 
    get { return _isValid; } 
    set 
    { 
     _isValid = value; 
     MyNewTextColorProperty = _isValid ? Color.Blue : Color.Red; 

     OnPropertyChanged(); 
    } 
} 
+2

这不是一个可接受的解决方案,ViewModel不应该知道任何有关页面样式。 –