我有一个视图,其中包含当前用户的用户配置文件。该视图包含一个视图模型,该模型具有与用户名或电子邮件地址等单个属性的双向绑定。该视图还有一个行为,它会验证输入并显示输入无效的错误。由于双向绑定,即使行为表明输入错误,视图模型也会更新值。我需要解决这个问题。
我当前的方法是使用将行为包含在视图模型中作为属性。因此,我可以在视图模型中的属性设置器中访问行为的属性。所以我无法停止对错误输入的更新。但我无法从视图的 xaml 中的视图模型访问行为。这是我能做到的吗?
我的下一个方法是将行为的“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;
}
总结一下:我使用这种行为来验证某些输入。但视图模型不知道输入是否正确。这是我目前的问题。我不知道如何通知视图模型有关输入的状态。
}