我有一个包含当前用户的用户资料的视图。该视图包含一个视图模型,该模型具有双向绑定到诸如用户名或电子邮件地址之类的单个属性。该视图还具有一个行为,该行为会验证输入并显示错误,表明输入无效。由于双向绑定,即使行为表明输入错误,视图模型也会更新该值。我需要解决这个问题。
我当前的方法是使用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。
}
答案 0 :(得分:1)
我认为,回答这个问题有点晚了,但是今天我有同样的事情。
我如何解决。
在您的cs端,您可以在其中获得viewmodel的实例(应该将其设为单例)
在您的TelNumBehavior类中,您应该使用该单例实例。
在该实例中,您可以在条目每次更改时触发一个命令。
如果您仍然遇到相同的问题,我也可以共享代码。