- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在良好的文本框验证之前,如何禁用按钮?
我已经做了一些事情,但我不知道如何隐藏按钮,直到使用 MVVM 模式以正确的方式进行良好的验证。
我仍在学习这种 MVVM 模式。
这是我的代码片段:
验证规则类:
public class NotEmptyValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
return string.IsNullOrWhiteSpace((value ?? "").ToString())
? new ValidationResult(false, "Field is required")
: ValidationResult.ValidResult;
}
}
<TextBox
Style="{StaticResource MaterialDesignFilledTextFieldTextBox}"
AcceptsReturn="True"
TextWrapping="Wrap"
materialDesign:HintAssist.Hint="Content"
IsEnabled="{Binding Path=IsChecked,
ElementName=MaterialDesignOutlinedTextFieldTextBoxEnabledComboBox}"
MaxLength="1000" materialDesign:ValidationAssist.UsePopup="True">
<TextBox.Text>
<Binding Path="Task.Content" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<domain:NotEmptyValidationRule
ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
private ICommand _submitCommand;
public ICommand SubmitCommand
{
get
{
if (_submitCommand == null)
{
_submitCommand = new RelayCommand(SubmitExecute, anSubmitExecute, false);
}
return _submitCommand;
}
}
private void SubmitExecute(object parameter)
{
Task.Id++;
Tasks.Add(Task);
}
private bool CanSubmitExecute(object parameter)
{
// What can I do to prevent to show this button when validation
// failed
return true;
}
最佳答案
您应该执行 INotifyDataErrorInfo
您的Task
中的界面类,或在您的 View 模型类中实现它并包装数据绑定(bind)Task.Content
属性,例如:
private RelayCommand _submitCommand;
public ICommand SubmitCommand
{
get
{
if (_submitCommand == null)
{
_submitCommand = new RelayCommand(SubmitExecute, CanSubmitExecute, false);
}
return _submitCommand;
}
}
private void SubmitExecute(object parameter)
{
Task.Id++;
Tasks.Add(Task);
}
public string Content
{
get { return Task.Content; }
set
{
Task.Content = value;
if (string.IsNullOrEmpty(Task.Content))
_validationErrors[nameof(Content)] = "Field is required";
else
_validationErrors.Remove(nameof(Content));
ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(nameof(Content)));
_submitCommand.RaiseCanExecuteChanged();
}
}
private bool CanSubmitExecute(object parameter)
{
return HasErrors;
}
#region INotifyDataErrorInfo
private readonly Dictionary<string, string> _validationErrors = new Dictionary<string, string>();
public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
public System.Collections.IEnumerable GetErrors(string propertyName)
{
if (string.IsNullOrEmpty(propertyName)
|| !_validationErrors.ContainsKey(propertyName))
return null;
return new string[1] { _validationErrors[propertyName] };
}
public bool HasErrors
{
get { return _validationErrors.Count > 0; }
}
#endregion
<TextBox Text="{Binding Content, UpdateSourceTrigger=PropertyChanged, ValidatesOnNotifyDataErrors=True}" />
CanExecuteChanged
ICommand
的事件.如何做到这一点取决于实现。大多数实现都有一个类似
RaiseCanExecuteChanged()
的方法。或类似的。
关于c# - 如何禁用按钮,直到在 wpf mvvm 中进行良好验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56394736/
我需要在 JavaScript 中的笛卡尔坐标和球坐标之间进行转换。我在论坛上浏览了一下,没有找到我要找的东西。 现在我有这个: this.rho = sqrt((x*x) + (y*y) + (z*
有没有matrix3d可以像这样把矩形变成梯形的?我知道常规的 2d 矩阵变换只能以平行四边形结束,因为您只能有效地倾斜和旋转。 div { width: 300px; height:
关于这个例子(d3.j radial tree node links different sizes),我想知道是否可以在 d3.js 中混合径向树和直线树。 对于我的 jsFiddle 示例:htt
我尽量把标题写得最好,但我不确定如何准确描述这里发生的事情,所以请随时更正。 我想使用 › 直 Angular 引号 (›) 而不是 > 直 Angular 引号 (>),虽然 › 字符比 > 短,但
我正在尝试使用 CSS 创建一个具有圆边的矩形棱柱,如下图所示。 到目前为止,我已经指定了顶部和底部的边界半径。问题是我不知道如何让另一边的左右边缘向内 curl 。因此,拐 Angular 处不应有
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 去年关闭。 社区去年审查了是否重
首先,我刚刚开始学习 HTML 和 CSS。 我想如何使用这段代码: https://codepen.io/martinjkelly/pen/vEOBvL .container { width:
我是一名优秀的程序员,十分优秀!