wpf - 对话框中的 MaterialDesignInXaml 验证 - 如何比较 2 个文本框?
问题描述
我正在尝试使用 MVVM 模式(、eactiveUI 和 MaterialDesignInXaml EmployeeViewModel 视图模型。该视图模型只包含 2 个属性:EmployeeSurname 和 EmployeeName(不像我知道的真正的视图模型,但它用于对话主机并从中获取数据)。我在单独的类中也有简单的验证规则(不包括在这里)我通过xaml添加到我的一个文本框目前。基本的东西验证在单个元素上工作得很好,但我想实现更多,特别是:
- 如何比较 2 个或多个复选框?我无法将数据从另一个文本框传递到验证规则,它仅适用于分配规则的当前文本框。
- 如何在现有对话框之上显示另一个对话框(例如,在关闭对话框以保存更改之前要求确认) - 这是正确的方法吗?
- 如何在打开对话框时最初禁用“保存”按钮(因此当用户第一次键入正确的值时将启用它)?那个看起来很简单的广告我很容易在主窗口上使用命令来做到这一点,但是使用 MaterialDesignInXaml 对话框按钮中使用的路由命令我不知道如何实现这一点
- 我知道当用户输入一些数据时如何启用/禁用保存按钮,但最初如何禁用它。我尝试通过直接在 xaml 上设置该属性来添加禁用按钮,但它是永久性的。听起来真的很容易,但我现在被困在那些事情上。
XAML
<DataTemplate DataType="{x:Type local:EmployeeViewModel}">
文本框1:
<TextBox Name="txtEmployeeName" MaxLength="8">
<TextBox.Text>
<Binding Path="EmployeeName" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<VR:NameSurnameRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
TextBox2(它还没有任何验证):
<TextBox Name="txtSurname" Text="{Binding EmployeeSurname, UpdateSourceTrigger=PropertyChanged}" />
保存按钮:
<Button Content="_Login" Command="{x:Static md:DialogHost.CloseDialogCommand}" Grid.Row="1" Grid.Column="2">
<Button.CommandParameter>
<system:Boolean>True</system:Boolean>
</Button.CommandParameter>
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=(Validation.HasError), ElementName=txtEmployeeName}" Value="True">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
取消按钮
<Button Content="_Cancel" Command="{x:Static md:DialogHost.CloseDialogCommand}" Grid.Row="1" Grid.Column="0" />
该对话框在资源中,没有代码隐藏。提前致谢
解决方案
谢谢,该包装器有效,但在测试了其他一些东西之后,我最终决定使用https://fluentvalidation.net/。在那里比较字符串非常容易,我发现它非常灵活。关于初始验证,我发现只需将 ValidatesOnTargetUpdated="True"添加到 xaml 中的验证规则就可以了(当我使用流利验证时不需要):
<TextBox.Text>
<Binding Path="EmployeePassword2" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<VR:NameSurnameRule ValidatesOnTargetUpdated="True"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
推荐阅读
- asp.net-core - SQL连接失败时启动ASP.NET核心应用程序的正确方法是什么
- c - 链表添加新的根元素
- spring - updateFirst 方法并不总是保存对象
- r - R:ARIMA 模型和残差之间的自相关
- ada - 从大端数据中提取记录
- apache-spark - 无法使用 Spark 2.4.3 写入 Redshift
- wordpress - WP_QUERY 返回所有帖子(无论权限如何)
- sql - BigQuery:加入 Firestore 集合及其子集合
- docker-compose - jhipster-registry容器启动过程中出现“Your JWT secret key is not set, you will not be able to log into the JHipster”的解决方法
- java - 如何创建搜索嵌入值的存储库方法?