具有ViewModel和行为的Xamarin视图

时间:2018-09-29 11:13:07

标签: xamarin mvvm viewmodel behavior

我有一个包含当前用户的用户资料的视图。该视图包含一个视图模型,该模型具有双向绑定到诸如用户名或电子邮件地址之类的单个属性。该视图还具有一个行为,该行为会验证输入并显示错误,表明输入无效。由于双向绑定,即使行为表明输入错误,视图模型也会更新该值。我需要解决这个问题。

我当前的方法是使用viewmodel中的行为作为属性。因此,我可以在视图模型的属性设置器中访问行为的属性。所以我无法停止对错误输入的更新。但是我无法从视图的xaml中的viewmodel访问行为。那是我完全可以做到的方式吗?

我的下一个方法是将行为的“ isValid”属性传递给视图模型。但是又一次,我不知道该怎么做,有可能吗?

最后一种方法是在视图模型中创建命令,使用单向绑定将其绑定到用户配置文件中的新按钮,然后以某种方式将输入从视图传递到命令并更新用户配置文件。

可能有人可以帮助我吗?

编辑: 我发布了一些代码:

这是我的行为的一个条目:

<Entry x:Name="phoneNumber" Text="{Binding TelephoneNum, Mode=TwoWay}">
    <Entry.Behaviors>
        <behaviors:TelNumBehavior x:Name="NumValidatorUser"/>
    </Entry.Behaviors>
</Entry>

TelNum行为:

public class TelNumBehavior : Behavior<Entry>
{
...
public static readonly BindablePropertyKey IsVisiblePropertyKey = 
        BindableProperty.CreateReadOnly("IsVisible", typeof(bool), typeof(TelNumBehavior), false);
public static readonly BindableProperty IsVisibleProperty = IsVisiblePropertyKey.BindableProperty;

...
public bool IsVisible
{
    get { return (bool) this.GetValue(IsVisibleProperty); }
    set
      {
          this.SetValue(IsVisiblePropertyKey, value);
       }
    }
...
(OnAttachedTo, OnDetachingFrom)
...

private void bindable_TextChanged(object sender, TextChangedEventArgs e)
{
    Entry entry = sender as Entry;
    this.IsVisible = (entry.Text == "")
            ? true
            : (Regex.IsMatch(e.NewTextValue, mobileRegex) || Regex.IsMatch(e.NewTextValue, fixedLineRegex));
    entry.TextColor = this.IsVisible ? Color.Default : Color.Red;
}

总结一下:我使用该行为来验证某些输入。但是,视图模型不知道输入是否正确。这是我目前的问题。我不知道如何将输入状态告知ViewModel。

}

1 个答案:

答案 0 :(得分:1)

我认为,回答这个问题有点晚了,但是今天我有同样的事情。

我如何解决。

  1. 在您的cs端,您可以在其中获得viewmodel的实例(应该将其设为单例)

  2. 在您的TelNumBehavior类中,您应该使用该单例实例。

  3. 在该实例中,您可以在条目每次更改时触发一个命令。

如果您仍然遇到相同的问题,我也可以共享代码。