在MVVM WPF应用程序中,如何显示按钮的验证错误?

时间:2018-10-10 10:54:06

标签: wpf mvvm

我有一个视图,该视图绑定到具有许多属性的视图模型。一些属性直接绑定到控件,例如文本框。为此,我设置了一个验证模板,该模板显示带有带箭头的红色边框,该红色边框在工具提示中显示该属性的错误。

其他属性由响应于单击按钮而打开的表单设置。例如,我有一个标签为“单击以编辑持续时间”的按钮,该按钮弹出表格来编辑signingConfigs { release { v1SigningEnabled true v2SigningEnabled true storeFile file('/Users/Document/test.jks') storePassword 'test123' keyAlias 'test' keyPassword 'test123' } } StartDate属性。该按钮绑定到视图模型中的命令,该命令会弹出表单。

视图模型实现了EndDate,因此对于直接绑定到属性的控件,我可以将错误消息附加到绑定到它们的属性上,并引发INotifyDataErrorInfo事件。

我想要的是,如果未正确设置开始日期和结束日期,则将红色边框和工具提示应用于该按钮。将错误附加到ErrorsChangedStartDate属性不会起作用,因为该按钮未绑定到这些属性。

1 个答案:

答案 0 :(得分:0)

我在一个应用程序中做了同样的事情,该应用程序中还有另外一部分数据需要完成才能继续。我能够使按钮出现验证错误的方法是使用如下标记:

<Button Grid.Column="1" Grid.Row="0" Content="{DynamicResource resEnterSecureInformation}" Width="200" Command="{Binding PrimaryApplicant.SecureInformation.OpenSecureInformationWindowCommand}" Tag="{Binding PrimaryApplicant.SecureInformationComplete, ValidatesOnDataErrors=True}"></Button>

在我的app.xaml中也有一种样式,可以在设置错误时添加红色轮廓和工具提示:

<Style TargetType="Button">
            <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)/ErrorContent}"></Setter>
            <Style.Triggers>
                <Trigger Property="IsVisible" Value="True">
                    <Setter Property="Validation.ErrorTemplate">
                        <Setter.Value>
                            <ControlTemplate>
                                <Border BorderBrush="Red"  BorderThickness="1" >
                                    <AdornedElementPlaceholder/>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Validation.ErrorTemplate">
                        <Setter.Value>
                            <ControlTemplate>
                                <AdornedElementPlaceholder/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>

我这样做是为了在禁用按钮时也不会显示验证错误(无需向用户显示他们无法修复的内容)

希望这会有所帮助