【发布时间】:2018-09-30 12:30:00
【问题描述】:
目前我不知道如何解决我的问题。我正在用 xamarin.forms 编写一个应用程序。
我有一个视图,其中包含用户的用户资料。例如,有一个带有用户名的条目。该字段以双向模式绑定到视图模型:
<Entry x:Name="givennameSurname" Text="{Binding FullName, Mode=TwoWay}" />
整个用户配置文件包含一些通过行为验证的字段:
<behaviors:TelNumBehavior x:Name="NumValidatorUser" IsValid="{Binding Source={x:Reference root}, Path=BindingContext.UserTelNumBehavior, Mode=TwoWay }"></behaviors:TelNumBehavior>
isValid 属性也绑定到视图模型。
我想达到什么目标?我希望,如果其中一种行为验证输入为 false,则无法更新用户配置文件。
所以我想在按钮上创建一个命令。该按钮有一个 canExecute 方法:该方法检查视图模型中的布尔值是真还是假。如果为真,我想强制从视图中刷新视图模型的数据。我也使用 canExecute 来防止不必要的更改,如果 UI 处于状态,则某些输入是错误的:
public string FullName
{
get => profile.GivenName;
set
{
if (CanSave())
{
profile.GivenName = value;
OnPropertyChanged();
}
}
}
有什么问题? 我用一种行为改变了输入,所以行为表明输入是错误的。然后我编辑用户名。然后我将错误行为的输入更改为真。现在用户名的输入不会在视图模型中刷新。我想用命令刷新它,但我不知道如何强制从视图刷新到视图模型。
【问题讨论】: