2017-08-02 118 views
2

我试着写与MAX-和MIN-值的简单行为,在一定范围内验证输入的值:行为 - 视图模型绑定

<Entry Text="{Binding Quantity, Mode=TwoWay}"> 
    <Entry.Behaviors> 
    <ui:ValueInRangeValidator x:Name="QtyValidator" MinValue="1" MaxValue="10"/> 
    </Entry.Behaviors> 
</Entry> 

这工作得很好,但尝试添加绑定时例如。 MaxValue="{Binding MaxVal}"该值为默认值。

我用我的行为如下:

public static BindableProperty MaxValueProperty = 
     BindableProperty.Create("MaxValue", typeof(decimal?), typeof(ValueInRangeValidator)); 
public decimal? MaxValue 
{ 
    get { return (decimal?)GetValue(MaxValueProperty); } 
    set 
    { 
     SetValue(MaxValueProperty, value); 
     OnPropertyChanged(); 
    } 
} 

我也试着设置在BindableProperty属性更改事件,但它似乎永远不会开火。我知道viewmodel是正确的,因为将同一个属性绑定到标签可以显示值。

回答

1

尝试这样:

<Entry x:Name="Entry1" BindingContext="{Binding}" Text="{Binding Quantity, Mode=TwoWay}"> <Entry.Behaviors> <ui:ValueInRangeValidator x:Name="QtyValidator" MinValue="1" MaxValue="{Binding BindingContext.MaxVal, Source={x:Reference Entry1}}"/> </Entry.Behaviors> </Entry>

+0

我加了名字到父视图,而不是,因为这意味着我不需要重新绑定或命名该项控制,并使得整个访问查看万一您需要在多个地方使用它。 感谢您的帮助! –