行为 - ViewModel绑定

时间:2017-08-02 07:45:48

标签: c# xaml xamarin xamarin.forms

我试图用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 个答案:

答案 0 :(得分: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>