如何在行为中绑定属性?

时间:2019-07-16 15:26:47

标签: c# xaml xamarin.forms

我创建了使用电话面罩的行为。当明确插入Mask时,它工作正常。但是,当我在选择器中更改电话类型时,我想与视图模型进行通信以更改蒙版。

在xaml文件中:

<Picker 
      x:Name="picker_cadastronotificacao_tipotelefone" 
      Title="{x:Static local:AppResources.picker_cadastronotificacao_tipotelefone}"
      Style="{StaticResource Picker}"
      SelectedItem="{Binding TipoTelefoneSelecionado}">
      <Picker.Items>
             <x:String>Celular</x:String>
             <x:String>Telefone Fixo</x:String>
      </Picker.Items>
</Picker>


<Entry 
      x:Name="entry_cadastronotificacao_telefone" 
      Placeholder="{x:Static local:AppResources.entry_cadastronotificacao_telefone}" 
      Style="{StaticResource EntradasTexto}" 
      Text="{Binding Telefone}"
      Keyboard="Telephone"
      IsEnabled="{Binding HabilitarCampoTelefone}">

      <Entry.Behaviors>
             <behavior:MaskBehavior Mascara="{Binding MascaraTelefone}"/>
      </Entry.Behaviors>
</Entry>

在视图模型中:

if (TipoTelefoneSelecionado == "Telefone Fixo")
      MascaraTelefone = "(XX) XXXX - XXXX";
else if(TipoTelefoneSelecionado == "Celular")
      MascaraTelefone = "(XX) XXXXX - XXXX";

错误:找不到“睫​​毛膏”的属性,可绑定属性或事件,或值和属性之间的类型不匹配。

1 个答案:

答案 0 :(得分:1)

您需要将MaskBehavior.Mascara属性设为可绑定的属性(而不是“常规”属性。

也就是说,用MaskBehavior代替:

public string Mascara { get; set; }

执行以下操作:

public static readonly BindableProperty MascaraProperty = BindableProperty.Create(
                nameof(Mascara),
                typeof(MaskBehavior),
                typeof(string));

public string Mascara
{
    get => (string) GetValue(MascaraProperty);
    set => SetValue(MascaraProperty, value);
}