C# 使用caliburn micro和fluent验证按钮进行验证
我想使用caliburn micro和FluentValidation在按钮事件上显示验证。验证规则当前按预期显示,但在单击按钮之前无法隐藏它们。对Wpf来说是相当新的,所以请简单一点。我已尝试绑定ValidateSondaErrors,但无法绑定。此外,我还试图隐藏显示错误的ControlTemplate 我的看法C# 使用caliburn micro和fluent验证按钮进行验证,c#,wpf,caliburn.micro,fluentvalidation,C#,Wpf,Caliburn.micro,Fluentvalidation,我想使用caliburn micro和FluentValidation在按钮事件上显示验证。验证规则当前按预期显示,但在单击按钮之前无法隐藏它们。对Wpf来说是相当新的,所以请简单一点。我已尝试绑定ValidateSondaErrors,但无法绑定。此外,我还试图隐藏显示错误的ControlTemplate 我的看法 <UserControl.Resources> <BooleanToVisibilityConverter x:Key="booleanVisi
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="booleanVisibilityConverter"/>
</UserControl.Resources>
<Canvas FocusManager.FocusedElement="{Binding ElementName=box}">
<!-- Sets the focus to start with textbox-->
<Button x:Name="ValidateText" Content="Validate" Canvas.Left="234" Canvas.Top="265" Width="301" Height="29" />
<TextBox Height="23" Canvas.Left="205" TextWrapping="Wrap" Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
Canvas.Top="187" Width="330" TabIndex="0" x:Name="box" >
<Validation.ErrorTemplate >
<ControlTemplate >
<StackPanel Orientation="Horizontal" >
<!-- Placeholder for the TextBox itself -->
<AdornedElementPlaceholder x:Name="textBox" />
<TextBlock Margin="10" Text="{Binding [0].ErrorContent}" Foreground="Red" />
</StackPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>
</Canvas>
明白了!我创建了一个名为Validation的标志,并在HomepageViewModel加载时将其设置为false。然后在以下代码中检查验证是否为真:
public string this[string columnName]
{
get
{
if (!Validation)
{
return null;
}
var firstOrDefault = _userValidator.Validate(this).Errors.FirstOrDefault(lol => lol.PropertyName == columnName);
if (firstOrDefault != null)
return _userValidator != null ? firstOrDefault.ErrorMessage : "";
return "";
}
}
public string Error
{
get
{
if (Validation)
{
if (_userValidator != null)
{
FluentValidation.Results.ValidationResult results = _userValidator.Validate(this);
if (results != null && results.Errors.Any())
{
string errors = string.Join(Environment.NewLine, results.Errors.Select(x => x.ErrorMessage).ToArray());
return errors;
}
}
}
return string.Empty;
}
调用button方法时,我将标志(验证)设置为true,并将notify属性更改为更新视图,如下所示:
Validation = true; // turn on validation
NotifyOfPropertyChange(null); //refresh the properties/view
例如:
希望这对将来的人有所帮助我不理解你的问题,你能展示一下你拥有的和你想要的……你说一切都好,但你想隐藏……我想要错误消息“没有输入姓名”仅在单击按钮时显示在HomePageView上。现在它一直在验证。
public string this[string columnName]
{
get
{
if (!Validation)
{
return null;
}
var firstOrDefault = _userValidator.Validate(this).Errors.FirstOrDefault(lol => lol.PropertyName == columnName);
if (firstOrDefault != null)
return _userValidator != null ? firstOrDefault.ErrorMessage : "";
return "";
}
}
public string Error
{
get
{
if (Validation)
{
if (_userValidator != null)
{
FluentValidation.Results.ValidationResult results = _userValidator.Validate(this);
if (results != null && results.Errors.Any())
{
string errors = string.Join(Environment.NewLine, results.Errors.Select(x => x.ErrorMessage).ToArray());
return errors;
}
}
}
return string.Empty;
}
Validation = true; // turn on validation
NotifyOfPropertyChange(null); //refresh the properties/view