gpt4 book ai didi

wpf - 对话框中的MaterialDesignInXaml验证-如何比较2个文本框?

转载 作者:行者123 更新时间:2023-12-03 10:31:05 25 4
gpt4 key购买 nike

我正在尝试使用MVVM模式(,eactiveUI和MaterialDesignInXaml编写简单的WPF应用程序。
在主窗口上,我有带有2个文本框的DialogHost,然后取消和保存按钮。
该对话框存储为资源,并通过传递EmployeeViewModel View模型从主窗口View Model中打开。
该 View 模型仅包含2个属性:EmployeeSurname和EmployeeName(不像我所知道的一个真正的 View 模型,但它可用于对话框宿主并从中获取数据)。
我在单独的类(这里不包括)中也有一个简单的验证规则,该类是我现在通过xaml添加到我的一个文本框中的。
验证的基本内容可以在单个元素上正常运行,但是我想实现更多,尤其是:

  • 如何比较2个或更多复选框?我无法将数据从另一个文本框传递到验证规则,它仅适用于分配了规则的当前文本框。
  • 如何在现有对话框顶部显示另一个对话框(即,在关闭对话框以保存更改之前要求确认)-这是正确的方法吗?
  • 如何在打开对话框时首先禁用“保存”按钮(以便在用户首次键入正确值时将其启用)?
    那个看起来很简单的广告,我可以轻松地在主窗口上使用命令来执行此操作,但是由于在MaterialDesignInXaml对话框按钮中使用了路由命令,因此我不确定如何实现此
  • 我知道当用户输入一些数据时如何启用/禁用保存按钮,但是最初如何禁用它。
    我试图通过直接在xaml上设置该属性来添加禁用按钮,但是它是永久的。
    听起来确实很容易,但我现在仍然坚持这些。

  • XAML
         <DataTemplate DataType="{x:Type local:EmployeeViewModel}">
    TextBox1:
                    <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" />
    该对话框在资源中,没有代码隐藏。
    提前致谢

    最佳答案

    您可以使用包装方法将一些内容传递给验证规则,很好的例子是here。或者,您可以在模型中使用IErrorDataInfo进行验证(或将此方法与“规则”验证结合使用,但将规则附加到 View 模型中)。
    对于首次验证,您可以在ViewModel构造函数中引发PropertyChanged,这将强制首次验证。

    关于wpf - 对话框中的MaterialDesignInXaml验证-如何比较2个文本框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65593833/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com