Hi有一个使用mvvm
的应用程序,在XAML中有3个文本框,所有这些文本框都需要不为空,底部有一个按钮是submit,我已经实现了一个验证器,使得当文本框不为空时,在UI中用红色边框显示错误,我想要的是,当文本框处于错误状态时,也禁用submit按钮
我尝试的一种方法是像这样实现IDataErrorInfo
#region IDataErrorInfo Members
public string Error
{
get { return null; }
}
public string this[string propertyName]
{
get
{
//Code here to manually disable the submit button, if the fields are empty
return null;
}
}
#endregion
我可以手动检查文本框是否为空,因为它们是绑定到属性的,我也可以使用属性绑定submit按钮的isEnabled
属性,但是IDataErrorInfo
中的方法不会每次验证状态发生更改时都被点击。
基本上,我不能让submit后面的方法执行,除非表单是有效的,并且这样做的方式不会中断线上的事情
确保文本框的绑定支持验证状态更改:
<TextBox Text="{Binding MyProperty, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True, ValidatesOnDataErrors=True}"
<Button Content="Submit" Command="{Binding SubmitCommand}"
定义命令以包含CanExecute方法:
public ICommand SubmitCommand
{
get
{
return _submitCommand ?? (_submitCommand = new RelayCommand(ExecuteSubmitCommand, CanExecuteSubmitCommand));
}
}
在属性_SubmitCommand?.RaiseCanExecuteChanged()的setter中添加这个额外的调用;
public string MyProperty
{
get { return _myProperty; }
set
{
_myProperty = value;
OnPropertyChanged(nameof(MyProperty));
_submitCommand?.RaiseCanExecuteChanged();
}
}
然后,在您的视图模型中验证您的值,并将其验证结果保留在某些bool字段中:
public string this[string propertyName]
{
get
{
if (propertyName == nameof(MyProperty))
{
_isValidMyProperty = !string.IsNullOrWhiteSpace(MyProperty);
if (!_isValidMyProperty )
{
return "Invalid value";
}
}
return null;
}
}
在CanExecute方法中,返回是否可以执行Submit命令。按钮将根据命令可用性自动启用/禁用:
private bool CanExecuteSubmitCommand()
{
return _isValidMyProperty;
}
您可能知道,在正常模式下,当状态更新时,我们使用更新依赖项来获得通知,如下所示: 但在我的例子中,我的状态中有一个数组,我正在尝试在useEffect的循环中更新它,如下所示: 在本例中,每次forEach循环运行时,我都会得到初始val(我知道,因为val不是useffect的依赖项),但如果我将其作为依赖项,它将更新两次。解决这个问题的办法是什么? 编辑:基本上,我的意思是,当我在useffe
问题内容: 我想检查用户在程序启动时是否按下了 Shift 键。(这意味着在程序启动前先按 Shift 键)这是一个简单的控制台程序,与X无关。 这可能类似于Win32 函数。 我想知道我是否可以做到这一点以及如何做到,但是不知道直接访问终端有什么利弊。 问题答案: 你不能 该键不被视为字符键,因此,即使您直接访问终端,也将无法检测到该键。 也许您不必。例如,假设您使用的是美式键盘,其中第一行中的
我有一个组件,看起来像: 它从datepicker组件获取currentDate属性,如下所示: 当我从日期选择器中选择新日期时,this.props.current子组件上的日期会更新。这是我想要的日期。但是,当更新该prop时,它不会用新的预期数据重新呈现表。我意识到我必须更新子表的状态才能重新渲染。我试图通过设置当前日期:this.props.current日期来设置ftchData()方法
问题内容: 我知道如何使用$?检查先前执行的命令的状态,我们可以使用exit命令使该状态成为当前状态。但是对于bash中的循环,总是返回状态0,有什么办法可以使循环中断某些状态。 问题答案: 循环的状态是最后执行的命令的状态。您可以使用break中断循环,但如果中断成功,则循环状态为。但是,您可以使用子shell并退出而不是中断。换一种说法: 您也可以将循环放入函数中并从中返回一个值。
在我的项目中,如何键盘大写锁定状态。我已经提到了这个问题,我如何才能获得Caps锁定状态,并将其设置为on,如果它还没有?。但我得到的是JavaFX解决方案。请给我解决方案。我也是此站点https://community.oracle.com/thread/2415027?tstart=0的引用者
在执行测试之后,我将获得目录中的XML文件。在这里,我使用以下命令生成HTML报告: 在中,我有一个文件,它用于根据HTML报告的结果(例如:通过、中断、失败、...)对测试进行分类。我相信这种分类是由诱惑力完成的。 所以我想知道这种分类有什么诱惑力。